home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d1
/
inter489.arc
/
INTERRUP.A
< prev
next >
Wrap
Text File
|
1989-07-23
|
296KB
|
8,084 lines
Please redistribute the following files unmodified as a group, in an archive
named INTER489:
INTERRUP.1ST the read-me file, containing credits, availability info
INTERRUP.A INT 00 through INT 27 \ total 223 pages at 60 lines
INTERRUP.B INT 28 through INT FF / per page, 241 with INTPRINT -p
INTERRUP.PRI a brief introduction to interrupts
INTPRINT.COM a simple formatter that also generates the list summary
INTPRINT.DOC instructions for INTPRINT
INTPRINT.C source code for INTPRINT
---------------------------------------------
Release 89.4 Last change 7/22/89
---------------------------------------------
If you notice any mistakes or omissions, please let me know! It is only with
YOUR help that the list can continue to grow at the current rate.
Please read the file INTERRUP.1ST before asking me any questions. You may find
that it's already been addressed.
Ralf Brown
ARPA: ralf@cs.cmu.edu \
UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf > preferred
BIT: ralf%cs.cmu.edu@cmuccvb /
FIDO: Ralf Brown 1:129/46 (new address!)
or post a message to the DR_DEBUG echo
I reply to all submissions and inquiries, but some of my replies bounce because
of bad return paths. If you don't get a response from me within a reasonable
period of time, send it again with a better return path (starting at harvard or
ucbvax for UUCP, from the ARPA Internet for others).
---------------------------------------------
See INTERRUP.1ST for the key to system abbreviations and a list of the
trademarks mentioned here.
---------------------------------------------
DISCLAIMER: I verify the information contained in this list to the best of my
ability, but I cannot be held responsible for any problems caused by use or
misuse of the information, especially for those functions not officially
documented. If it is marked "internal", you should check it carefully to make
sure it works the same way in your version of the software (and please let me
know whether or not it works the same way). Information marked with "???" is
known to be incomplete or guesswork.
---------------------------------------------
The use of -> instead of = signifies that the indicated register or register
pair contains a pointer to the specified item, rather than the item itself
---------------------------------------------
INT 00 - internal hardware - DIVIDE ERROR
Automatically called at end of DIV or IDIV operation that results in error
or overflow. Normally set by DOS to display an error message and abort
the program.
Note: on an 8086/8088, the return address points to the following instruction
on an 80286/80386, the return address points to the divide instruction
---------------------------------------------
INT 01 - internal hardware - SINGLE-STEP
Generated at end of each machine instruction if TF bit in FLAGS is set.
This is what makes the T command of DEBUG work for single-stepping. It is
not generated after MOV to segment register or POP of segment register
(unless you have a very early 8088 with a microcode bug).
---------------------------------------------
INT 01 - internal hardware - DEBUGGING EXCEPTIONS (80386)
Instruction address breakpoint fault - will return to execute instruction
Data address breakpoint trap - will return to following instruction
General detect fault, debug registers in use
Task-switch breakpoint trap
---------------------------------------------
INT 02 - external hardware - NMI (NON-MASKABLE INTERRUPT)
Generated by NMI signal in hardware. This signal has various uses:
Breakout switch on hardware debuggers
Parity error: all except Jr and CONV
Coprocessor interrupt: all except Jr and CONV
Keyboard interrupt: Jr, CONV
I/O channel check: CONV, PS50+
Disk-controller power-on request: CONV
System suspend: CONV
Real-time clock: CONV
System watch-dog timer, time-out interrupt: PS50+
DMA timer time-out interrupt: PS50+
---------------------------------------------
INT 03 - ONE-BYTE INTERRUPT
Generated by opcode CCh. Generally used to set breakpoints for debuggers.
Also used by Turbo Pascal versions 1,2,3 when {$U+} specified
---------------------------------------------
INT 04 - internal hardware - OVERFLOW
Generated by INTO instruction if OF flag is set. If flag is not set, INTO
is effectively a NOP. Used to trap any arithmetic errors before the
erroneous results propagate further through the computation.
---------------------------------------------
INT 05 - PRINT-SCREEN KEY
Automatically called by keyboard scanner when print-screen key is pressed.
Normally executes routine to print the screen, but may call any routine that
can safely be executed from inside the keyboard scanner. Status and result
byte for default handler is at address 0050:0000.
---------------------------------------------
INT 05 - internal hardware - BOUND CHECK FAILED (80186+)
Generated by BOUND instruction when the value to be tested is less than the
indicated lower bound or greater than the indicated upper bound. Returning
from this interrupt re-executes the failing BOUND instruction.
---------------------------------------------
INT 06 - internal hardware - UNDEFINED OPCODE (80286+)
---------------------------------------------
INT 07 - internal hardware - NO MATH UNIT AVAILABLE (80286+)
Can be used to emulate a numeric coprocessor in software
---------------------------------------------
INT 08 - IRQ0 - TIMER INTERRUPT
Generated 18.2 times per second, this interrupt is used to keep the
time-of-day clock updated.
---------------------------------------------
INT 08 - internal hardware - DOUBLE FAULT (80286+ protected mode)
Called when multiple exceptions occur on one instruction, or an exception
occurs in an exception handler. If an exception occurs in the double fault
handler, the CPU goes into SHUTDOWN mode (which circuitry in the PC/AT
converts to a reset).
---------------------------------------------
INT 09 - IRQ1 - KEYBOARD INTERRUPT
Generated when data is received from the keyboard. This is normally a scan
code, but may also be an ACK or NAK of a command on AT-class keyboards.
---------------------------------------------
INT 09 - internal hardware - MATH UNIT PROTECTION FAULT (80286+ protected mode)
---------------------------------------------
INT 0A - IRQ2 - EGA VERTICAL RETRACE
Notes: on the Tandy 1000, this interrupt is used by the hard disk
the TOPS and PCnet adapters use this interrupt request line by default
---------------------------------------------
INT 0A - internal hardware - INVALID TASK STATE SEGMENT (80286+ protected-mode)
---------------------------------------------
INT 0B - IRQ3 - COM2 INTERRUPT
Note: the TOPS and PCnet adapters use this interrupt request line as an
alternate
Note: on PS/2's, COM2 through COM8 share this interrupt
on many PC's, COM4 shares this interrupt
---------------------------------------------
INT 0B - internal hardware - NOT PRESENT (80286+ protected-mode)
Generated when loading a segment register if the segment descriptor
indicates that the segment is not currently in memory. May be used to
implement virtual memory.
---------------------------------------------
INT 0C - IRQ4 - COM1 INTERRUPT
Note: on many PC's, COM3 shares this interrupt
---------------------------------------------
INT 0C - internal hardware - STACK FAULT (80286+)
Generated on stack overflow/underflow in protected mode.
Note that the 80286 will shut down in real mode if SP=1 before a push. On
the PC AT and compatibles, external circuitry generates a reset on shutdown.
---------------------------------------------
INT 0D - IRQ5 - FIXED DISK (PC), LPT2 (AT/PS)
Note: the Tandy 1000 uses this line for the 60Hhz RAM refresh
---------------------------------------------
INT 0D - internal hardware - GENERAL PROTECTION VIOLATION (80286+)
Called in real mode when an instruction attempts to access a word operand
located at offset FFFFh or a PUSH MEM or POP MEM instruction contains an
invalid bit encoding in the second byte, or an instruction exceeds the
maximum length allowed (10 bytes for 80286, 15 bytes for 80386)
---------------------------------------------
INT 0E - IRQ6 - DISKETTE INTERRUPT
Generated by floppy disk controller on completion of an operation
---------------------------------------------
INT 0E - internal hardware - PAGE FAULT (80386 native mode)
used to implement virtual memory
---------------------------------------------
INT 0F - IRQ7 - PRINTER INTERRUPT
Generated by the LPT1 printer adapter when printer becomes ready.
Note: most printer adapters do not reliably generate this interrupt.
---------------------------------------------
INT 10 - internal hardware - COPROCESSOR ERROR (80286+)
Generated by the CPU when the -ERROR pin is asserted by the coprocessor.
AT's and clones usually wire the coprocessor to use IRQ13, but not all
get it right.
---------------------------------------------
INT 10 - VIDEO - SET VIDEO MODE
AH = 00h
AL = mode (graphics mode if graphics resolution listed)
text pixel graphic colors disp scrn system
resol box resoltn page addr
00h = 40x25 8x8 B&W 8 B800 CGA
= 40x25 8x14 B&W 8 B800 ATI VIP
01h = 40x25 8x8 16 8 B800 CGA
= 40x25 8x14 16 8 B800 ATI VIP
02h = 80x25 8x8 B&W 4 B800 CGA
= 80x25 8x8 B&W 8 B800 EGA,MCGA,VGA
= 80x25 8x14 B&W 8 B800 ATI VIP
03h = 80x25 8x8 16 4 B800 CGA
= 80x25 8x8 16 8 B800 EGA,MCGA,VGA
04h = 40x25 8x8 320x200 4 1 B800 CGA
05h = 40x25 8x8 320x200 4 gray 1 B800 CGA
06h = 80x25 8x8 640x200 B&W 1 B800 CGA
07h = 80x25 9x14 mono 1 B000 MDA,Hercules
= 80x25 8 EGA,VGA
= 80x25 9x14 mono B000 ATI VIP
08h = 20x25 8x8 160x200 16 B800 PCjr,Tandy 1000
09h = 40x25 8x8 320x200 16 B800 PCjr,Tandy 1000
0Ah = 80x25 8x8 640x200 4 B800 PCjr,Tandy 1000
0Bh = reserved (used internally by EGA BIOS)
0Ch = reserved (used internally by EGA BIOS)
0Dh = 40x25 8x8 320x200 16 8 A000 EGA,VGA
0Eh = 80x25 8x8 640x200 16 4 A000 EGA,VGA
0Fh = 80x25 8x14 640x350 mono 2 A000 EGA,VGA
10h = 80x25 8x14 640x350 4or16 2 A000 EGA,VGA
11h = 80x30 8x16 640x480 mono A000 VGA,MCGA,ATI EGA,ATI VIP
12h = 80x30 8x16 640x480 16/256k A000 VGA,ATI VIP
= 80x30 8x16 640x480 16/64 A000 ATI EGA Wonder
13h = 40x25 8x8 320x200 256/256k A000 VGA,MCGA,ATI VIP
14h = 80x25 8x8 640x200 Lava Chrome II EGA
= 640x400 16 Tecmar VGA/AD
15h = 80x25 8x14 640x350 Lava Chrome II EGA
16h = 80x25 8x14 640x350 Lava Chrome II EGA
= 800x600 16 Tecmar VGA/AD
17h = 80x34 8x14 640x480 Lava Chrome II EGA
= 132x25 Tecmar VGA/AD
18h = 132x44 8x8 mono Tseng Labs EVA
= 80x34 8x14 640x480 Lava Chrome II EGA
= 1024x768 16 Tecmar VGA/AD
19h = 132x25 8x14 mono Tseng Labs EVA
1Ah = 132x28 8x13 mono Tseng Labs EVA
= 640x350 256 Tecmar VGA/AD
1Bh = 640x400 256 Tecmar VGA/AD
1Ch = 640x480 256 Tecmar VGA/AD
1Dh = 800x600 256 Tecmar VGA/AD
22h = 132x44 8x8 Tseng Labs EVA
= 132x44 8x8 Ahead Systems EGA2001
= 132x43 Allstar Peacock (VGA)
23h = 132x25 6x14 Tseng Labs EVA
= 132x25 8x14 Ahead Systems EGA2001
= 132x25 8x8 16 B800 ATI EGA Wonder,ATI VIP
= 132x28 Allstar Peacock (VGA)
24h = 132x28 6x13 Tseng Labs EVA
= 132x25 Allstar Peacock (VGA)
25h = 80x60 8x8 640x480 Tseng Labs EVA
= 640x480 16 VEGA VGA
26h = 80x60 8x8 Tseng Labs EVA
= 80x60 8x8 640x480 Ahead Systems EGA2001
= 80x60 Allstar Peacock (VGA)
27h = 720x512 16 VEGA VGA
= 720x512 16 Genoa
= 132x25 8x8 mono B800 ATI EGA Wonder,ATI VIP
28h = ???x??? VEGA VGA
29h = 800x600 16 VEGA VGA
= 800x600 16 Orchid,STB,Genoa,Sigma
= 800x600 16 Allstar Peacock (VGA)
2Ah = 100x40 Allstar Peacock (VGA)
= 100x40 8x16 Orchid Prodesigner VGA
2Dh = 640x350 256 VEGA VGA
= 640x350 256 Genoa,STB
2Eh = 640x480 256 VEGA VGA
= 640x480 256 Orchid,STB,Genoa,Sigma
2Fh = 720x512 256 VEGA VGA
= 720x512 256 Genoa
30h = 800x600 256 VEGA VGA
= 800x060 256 Orchid,STB,Genoa,Sigma
= ???x??? B800 AT&T 6300
33h = 132x44 8x8 16 B800 ATI EGA Wonder,ATI VIP
36h = 960x720 16 VEGA VGA
= 960x720 16 STB
37h = 1024x768 16 VEGA VGA
= 1024x768 16 Orchid,STB,Genoa,Sigma
= 132x44 8x8 mono B800 ATI EGA Wonder,ATI VIP
40h = 80x25 8x16 640x400 2 1 B800 AT&T 6300, AT&T VDC600
= 80x25 8x16 640x400 2 1 B800 Compaq Portable
= 80x43 VEGA VGA, Tecmar VGA/AD
= 80x43 Video7 V-RAM VGA
= 80x43 Tatung VGA
41h = 640x200 16 1 AT&T 6300
= 132x25 VEGA VGA
= 132x25 Tatung VGA
= 132x25 Video7 V-RAM VGA
42h = 80x25 8x16 640x400 16 AT&T 6300, AT&T VDC600
= 132x43 VEGA VGA
= 132x43 Tatung VGA
= 132x43 Video7 V-RAM VGA
43h = unsupported 640x200 of 640x400 viewport AT&T 6300
= 80x60 VEGA VGA
= 80x60 Tatung VGA
= 80x60 Video7 V-RAM VGA
44h = disable VDC and DEB output AT&T 6300
= 100x60 VEGA VGA
= 100x60 Tatung VGA
= 100x60 Video7 V-RAM VGA
45h = 132x28 Tatung VGA
= 132x28 Video7 V-RAM VGA
46h = 100x40 8x15 800x600 2 AT&T VDC600
47h = 100x37 8x16 800x600 16 AT&T VDC600
48h = 80x50 8x8 640x400 2 B800 AT&T 6300, AT&T VDC600
49h = 80x30 8x16 640x480 Lava Chrome II EGA
4Dh = 120x25 VEGA VGA
4Eh = 120x43 VEGA VGA
4Fh = 132x25 VEGA VGA
50h = 132x25 9x14 mono Ahead Systems EGA2001
= 80x30 8x16 640x480 16 Paradise EGA-480
= 80x43 mono VEGA VGA
= 640x480 mono??? Taxan 565 EGA
= 80x34 Lava Chrome II EGA
51h = 80x30 8x16 Paradise EGA-480
= 80x30 Lava Chrome II EGA
= 80x34 8x14 640x480 16 ATI EGA Wonder
= 132x25 mono VEGA VGA
52h = 132x44 9x8 mono Ahead Systems EGA2001
= 132x43 mono VEGA VGA
= 94x29 8x14 752x410 16 ATI EGA Wonder
= 80x60 Lava Chrome II EGA
53h = 100x40 8x14 800x560 16 ATI EGA Wonder,ATI VIP
= 132x43 Lava Chrome II EGA
54h = 132x43 8x8 Paradise EGA-480
= 132x43 7x9 16/256k B800 Paradise VGA
= 132x43 8x9 16/256k B800 Paradise VGA on multisync
= 132x43 Taxan 565 EGA
= 132x43 AST VGA Plus
= 132x43 Hewlett-Packard D1180A
= 132x43 7x9 16 AT&T VDC600
= 132x25 Lava Chrome II EGA
= 100x42 8x14 800x600 16 A000 ATI EGA Wonder, VGA Wondr
55h = 132x25 8x14 Paradise EGA-480
= 132x25 7x16 16/256k B800 Paradise VGA
= 132x25 8x16 16/256k B800 Paradise VGA on multisync
= 132x25 Taxan 565 EGA
= 132x25 AST VGA Plus
= 132x25 Hewlett-Packard D1180A
= 132x25 7x16 16 AT&T VDC600
= 80x66 8x8 16/256k A000 ATI VIP
= 94x29 8x14 752x410 Lava Chrome II EGA
56h = 132x43 8x8 3??? 2 B000 NSI Smart EGA+
= 132x43 7x9 4 B000 Paradise VGA
= 132x43 8x9 4 B000 Paradisk VGA on multisync
= 132x43 mono Taxan 565 EGA
= 132x43 7x9 2 AT&T VDC600
57h = 132x25 8x14 3??? 4 B000 NSI Smart EGA+
= 132x25 7x16 4 B000 Paradise VGA
= 132x25 8x16 4 B000 Paradise VGA on multisync
= 132x25 mono Taxan 565 EGA
= 132x25 7x16 2 AT&T VDC600
58h = 100x75 8x8 800x600 16/256k A000 Paradise VGA
= 100x75 8x8 800x600 16 AT&T VDC600
= 80x33 8x14 16 B800 ATI EGA Wonder,ATI VIP
= 800x600 16 AST VGA Plus, Compaq VGA
= 800x600 16 Dell VGA
= 800x600 16 Hewlett-Packard D1180A
59h = 100x75 8x8 800x600 2 A000 Paradise VGA
= 100x75 8x8 800x600 2 AT&T VDC600
= 80x66 8x8 16/256k A000 ATI VIP
= 800x600 2 AST VGA Plus, Compaq VGA
= 800x600 2 Dell VGA
= 800x600 2 Hewlett-Packard D1180A
5Eh = 640x400 256 Paradise VGA,VEGA VGA
= 640x400 256 AST VGA Plus
= 640x400 256 Compaq VGA, Dell VGA
= 80x25 8x16 640x400 256 AT&T VDC600
5Fh = 640x480 256 Paradise VGA
= 640x480 256 AST VGA Plus
= 640x480 256 Compaq VGA, Dell VGA
= 640x480 256 Hewlett-Packard D1180A
= 80x30 8x16 640x480 256 AT&T VDC600 (512K)
60h = 80x??? ???x400 Corona/Cordata BIOS 4.10+
= 752x410 VEGA VGA
= 752x410 16 Tatung VGA
= 752x410 16 Video7 V-RAM VGA
61h = ???x400 Corona/Cordata BIOS 4.10+
= 720x540 VEGA VGA
= 720x540 16 Tatung VGA
= 720x540 16 Video7 V-RAM VGA
= 640x400 256 A000 ATI VGA Wonder
62h = 800x600 VEGA VGA
= 800x600 16 Tatung VGA
= 800x600 16 Video7 V-RAM VGA
= 640x480 256 A000 ATI VGA Wonder
63h = 1024x768 2 Video7 V-RAM VGA
= 800x600 256 A000 ATI VGA Wonder
64h = 1024x768 4 Video7 V-RAM VGA
65h = 1024x768 16 Video7 V-RAM VGA
= 1024x768 16 A000 ATI VGA Wonder
66h = 640x400 256 Tatung VGA
= 640x400 256 Video7 V-RAM VGA
67h = 640x480 256 Video7 V-RAM VGA
= 1024x768 4 A000 ATI VGA Wonder
69h = 720x540 256 Video7 V-RAM VGA
6Ah = 800x600 16 VESA standard interface
70h = extended mode set (see AX=0070h) Everex Micro Enhancer EGA
71h = 100x35 8x16 800x600 16of64 A000 NSI Smart EGA+
74h = 640x400 2 B800 Toshiba 3100 AT&T mode
7Ch = 512x512 16 Genoa
7Dh = 512x512 256 Genoa
7Eh = special mode set (see AX=007Eh) Paradise VGA, AT&T VDC600
7Fh = special function set (see AX=007Fh) Paradise VGA, AT&T VDC600
82h = 80x25 B&W AT&T VDC overlay mode *
83h = 80x25 AT&T VDC overlay mode *
86h = 640x200 B&W AT&T VDC overlay mode *
C0h = 640x400 2/prog pallet AT&T VDC overlay mode *
C4h = disable output AT&T VDC overlay mode *
D0h = 640x400 2 B800 DEC VAXmate AT&T mode
??? = 640x225 Z-100
??? = 640x400 Z-100
* for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
40h, or 44h
Note: IBM standard modes do not clear the screen if the high bit of AL is set
---------------------------------------------
INT 10 - VIDEO - Everex Micro Enhancer EGA - EXTENDED MODE SET
AX = 0070h
BL = mode (graphics mode if graphics resolution listed)
text pixel graphic color disp scrn monitor
resol box resoltn page addr
00h = 640x480 16 multisync'ing
01h = 752x410 16 multisync'ing
02h = 800x600 16 multisync'ing
03h = 80x34 multisync'ing
04h = 80x60 multisync'ing
05h = 94x29 multisync'ing
06h = 94x51 multisync'ing
07h = reserved
08h = reserved
09h = 80x44 EGA
0Ah = 132x25 EGA
0Bh = 132x44 EGA
0Ch = 132x25 CGA
0Dh = 80x44 mono
0Eh = 132x25 mono
0Fh = 132x44 mono
10h = reserved
11h = 1280x350 4
12h = 1280x600 4
13h = 640x350 256
14h = 640x400 256
15h = 512x480 256
---------------------------------------------
INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET SPECIAL MODE
AX = 007Eh
BX = The horizontal dimension of the mode desired
CX = The vertical dimension of the mode desired
(both BX/CX in pixels for graphics modes, rows for alpha modes)
DX = The number of colors of the mode desired
(use 0 for monochrome modes)
Return: BH = 7Eh if successful (Paradise VGA)
AL = 7Eh if successful (AT&T VDC600)
---------------------------------------------
INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - EXTENDED FUNCTIONS
AX = 007Fh
BH = 00h set VGA operation
BH = 01h set non-VGA operation
color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation.
monochrome mode 7 will set non-VGA MDA/Hercules operation.
BH = 02h query mode status
Return: BL = 00h if operating in VGA mode, 01h if non-VGA mode.
CH = total video RAM size in 64k byte units.
CL = video RAM used by the current mode.
BH = 03h lock current mode
allows current mode (VGA or non-VGA) to survive re-boot.
BH = 04h enter CGA mode (AT&T VDC600 only)
BH = 05h enter MDA mode (AT&T VDC600 only)
BH = 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh WRITE PARADISE REGISTERS 0,1,2,3,4,5
(port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
BL = value to set in the paradise register.
BH = 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5
(port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
Return: BL = value of the paradise register.
BH = 7Fh if successful.
Return: AL = 7Fh if successful (AT&T VDC600)
---------------------------------------------
INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
AH = 01h
CH bits 0-4 = start line for cursor in character cell
bits 5-6 = blink attribute
(00=normal, 01=invisible, 10=slow, 11=fast)
CL bits 0-4 = end line for cursor in character cell
Note: buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
returns unmapped cursor shape
---------------------------------------------
INT 10 - VIDEO - SET CURSOR POSITION
AH = 02h
DH,DL = row, column (0,0 = upper left)
BH = page number
0 in graphics modes
0-3 in modes 2&3
0-7 in modes 0&1
---------------------------------------------
INT 10 - VIDEO - READ CURSOR POSITION
AH = 03h
BH = page number
0 in graphics modes
0-3 in modes 2&3
0-7 in modes 0&1
Return: DH,DL = row,column
CH = cursor start line
CL = cursor end line
---------------------------------------------
INT 10 - VIDEO - READ LIGHT PEN POSITION (all but PS)
AH = 04h
Return: AH = 00h light pen switch not activated
= 01h light pen values in registers
DH,DL = row,column of current position
CH = raster line (0-199) (EGA) old graphics modes
CX = (EGA) raster line (0-nnn) new graphics modes
BX = pixel column (0-319 or 0-639)
---------------------------------------------
INT 10 - VIDEO - SELECT DISPLAY PAGE
AH = 05h
AL = display page
0-7 for modes 0 & 1
0-3 for modes 2 & 3
---------------------------------------------
INT 10 - PCjr VIDEO - CRT/CPU PAGE REGISTERS
AH = 05h
AL =
80h read CRT/CPU page registers
81h set CPU page register
BL = new page register value
82h set CRT page register
BH = new page register value
83h set both display registers
BL = new CPU page register
BH = new CRT page register
Return: BH = CRT page register
BL = CPU page register
---------------------------------------------
INT 10 - VIDEO - GRAPHICS BITMAP BUFFER (Corona/Cordata BIOS v4.10+)
AH = 05h
AL =
00h set address of graphics bitmap buffer (video modes 60h,61h)
BX = segment of buffer
0Fh get address of graphics bitmap buffer (video modes 60h,61h)
Return: DX = segment of graphics bitmap buffer
---------------------------------------------
INT 10 - VIDEO - SCROLL PAGE UP
AH = 06h
AL = number of lines to scroll window (0 = blank whole window)
BH = attributes to be used on blanked lines
CH,CL = row,column of upper left corner of window to scroll
DH,DL = row,column of lower right corner of window
---------------------------------------------
INT 10 - VIDEO - SCROLL PAGE DOWN
AH = 07h
AL = number of lines to scroll window (0 = blank whole window)
BH = attributes to be used on blanked lines
CH,CL = row,column of upper left corner of window to scroll
DH,DL = row,column of lower right corner of window
---------------------------------------------
INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
AH = 08h
BH = display page
Return: AL = character
AH = attribute of character (alpha modes)
---------------------------------------------
INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION
AH = 09h
AL = character
BH = display page
BL = attributes of character (alpha modes) or color (graphics modes)
if bit 7 set in graphics mode, character is xor'ed onto screen
CX = number of times to write character
Note: all characters are displayed, including CR, LF, and BS
---------------------------------------------
INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POSITION
AH = 0Ah
AL = character
BH = display page - alpha mode
BL = color of character (graphics mode, PCjr only)
if bit 7 set in graphics mode, character is xor'ed onto screen
CX = number of times to write character
(EGA) in graphics modes, replication count in CX works correctly
only if all character written are contains on the same row
Note: all characters are displayed, including CR, LF, and BS
---------------------------------------------
INT 10 - VIDEO - SET COLOR PALETTE
AH = 0Bh
BH = 00h
BL = border color (0-15) (text modes)
border color and background color (graphics modes)
(EGA)
BL = border color (0-15) and high-intensity background color
(16-31??? maybe should be high nybble?)
BH = 01h
BL = palette (0-3)
---------------------------------------------
INT 10 - VIDEO - WRITE DOT ON SCREEN
AH = 0Ch
AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5)
if bit 7 set, new color will be XORed with current pixel
BH = display page (ignored if mode only supports one page)
CX = column
DX = row
Note: only valid in graphics modes
---------------------------------------------
INT 10 - VIDEO - READ DOT ON SCREEN
AH = 0Dh
BH = display page (ignored if mode only supports one page)
CX = column
DX = row
Return: AL = color read
Note: only valid in graphics modes
---------------------------------------------
INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
AH = 0Eh
AL = character
BH = display page (alpha modes)
BL = foreground color (graphics modes)
Note: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
and do the expected things
---------------------------------------------
INT 10 - VIDEO - GET CURRENT VIDEO MODE
AH = 0Fh
Return: AH = number of columns on screen
AL = current video mode (see INT 10/AH=00h)
BH = current active display page
Note: if mode was set with bit 7 set ("no blanking"), the returned mode will
also have bit 7 set
---------------------------------------------
INT 10 - VIDEO - SET PALETTE REGISTER (Jr, PS, TANDY 1000, EGA, VGA)
AX = 1000h
BL = palette register to set
BH = color value to store
Note: on MCGA, only BX = 0712h is supported
---------------------------------------------
INT 10 - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA)
AX = 1001h
BH = color value to store
---------------------------------------------
INT 10 - VIDEO - SET ALL PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA)
AX = 1002h
ES:DX -> 17-byte palette register list (see below)
Format of palette register list:
Offset Size Description
00h 16 BYTEs values for palette registers 0-15
10h BYTE value for border color register
---------------------------------------------
INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
AX = 1003h
BL = 00h enable intensity
= 01h enable blink
---------------------------------------------
INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA)
AX = 1007h
BL = palette register number
Return: BH = palette register value
---------------------------------------------
INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA)
AX = 1008h
Return: BH = value
---------------------------------------------
INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA)
AX = 1009h
ES:DX -> 17-byte buffer (see AX=1002h)
---------------------------------------------
INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA)
AX = 1010h
BX = register number
CH = new value for green (0-63)
CL = new value for blue (0-63)
DH = new value for red (0-63)
---------------------------------------------
INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (EGA, VGA/MCGA)
AX = 1012h
BX = starting color register
CX = number of registers to set
ES:DX -> table of 3*CX bytes where each 3 byte group represents one
byte each of red, green and blue (0-63)
---------------------------------------------
INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA)
AX = 1013h
BL = 00h Select paging mode
BH = 00h Select 4 blocks of 64
BH = 01h Select 16 blocks of 16
BL = 01h Select Page
BH = page number (00h to 03h) or (00h to 0Fh)
Note: not valid in mode 13h
---------------------------------------------
INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA)
AX = 1015h
BL = palette register number
Return: DH = red value
CH = green value
CL = blue value
---------------------------------------------
INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (EGA, VGA/MCGA)
AX = 1017h
BX = starting palette register
CX = number of palette registers to read
ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h)
Return: CX number of red, green and blue triples in buffer
---------------------------------------------
INT 10 - VIDEO - undocumented - SET PEL MASK (EGA, VGA/MCGA)
AX = 1018h
BL = new PEL value
---------------------------------------------
INT 10 - VIDEO - undocumented - READ PEL MASK (EGA, VGA/MCGA)
AX = 1019h
Return: BL = value read
---------------------------------------------
INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA)
AX = 101Ah
Return: BL = paging mode
00h four pages of 64
01h sixteen pages of 16
BH = current page
---------------------------------------------
INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (EGA, VGA/MCGA)
AX = 101Bh
BX = starting palette register
CX = number of registers to convert
---------------------------------------------
INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
AH = 11h
The following functions will cause a mode set, completely resetting
the video environment, but without clearing the video buffer
AL = 00h, 10h: load user-specified patterns
ES:BP -> user table
CX = count of patterns to store
DX = character offset into map 2 block
BL = block to load in map 2
BH = number of bytes per character pattern
AL = 01h, 11h: load ROM monochrome patterns (8 by 14)
BL = block to load
AL = 02h, 12h: load ROM 8 by 8 double-dot patterns
BL = block to load
AL = 03h: set block specifier
BL = block specifier
(EGA/MCGA) bits 0,1 = block selected by chars with attribute
bit 3 = 0
bits 2,3 = block selected by chars with attribute
bit 3 = 1
(VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
bits 2,3,5 = block selected by attribute bit 3 = 1
AL = 04h, 14h: load ROM 8x16 character set (VGA)
The routines called with AL=1xh are designed to be called only
immediately after a mode set and are similar to the routines called
with AL=0xh, except that:
Page 0 must be active.
Bytes/character is recalculated.
Max character rows is recalculated.
CRT buffer length is recalculated.
CRTC registers are reprogrammed as follows:
R09 = bytes/char-1 ; max scan line (mode 7 only)
R0A = bytes/char-2 ; cursor start
R0B = 0 ; cursor end
R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
R14 = bytes/char ; underline loc
(*** BUG: should be 1 less ***)
---------------------------------------------
INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
AH = 11h
AL = 20h: set user 8 by 8 graphics characters (INT 1Fh)
ES:BP -> user table
AL = 21h: set user graphics characters
ES:BP -> user table
CX = bytes per character
BL = row specifier
00h user set
DL = number of rows
01h 14 rows
02h 25 rows
03h 43 rows
AL = 22h: ROM 8 by 14 set
BL = row specifier
AL = 23h: ROM 8 by 8 double dot
BL = row specifier
AL = 24h: load 8x16 graphics characters (VGA/MCGA)
BL = row specifier
Note: these functions are meant to be called only after a mode set
---------------------------------------------
INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
AX = 1130h
BH = pointer specifier
00h INT 1Fh pointer
01h INT 44h pointer
02h ROM 8 by 14 character font pointer
03h ROM 8 by 8 double dot font pointer
04h ROM 8 by 8 DD font (top half)
05h ROM alpha alternate (9 by 14) pointer
Return: ES:BP = specified pointer
CX = bytes/character
DL = character rows on screen
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) - GET EGA INFO
AH = 12h
BL = 10h
Return: BH = 00h color mode in effect (I/O port 3Dxh)
01h mono mode in effect (I/O port 3Bxh)
BL = 00h 64k bytes memory installed
01h 128k bytes memory installed
02h 192k bytes memory installed
03h 256k bytes memory installed
CH = feature bits
CL = switch settings
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC
AH = 12h
BL = 20h select alternate print screen routine
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION
AH = 12h
BL = 30h
AL = vertical resolution
00h 200 scan lines
01h 350 scan lines
02h 400 scan lines
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - PALETTE LOADING
AH = 12h
BL = 31h
AL = 00h enable default palette loading
01h disable default palette loading
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - VIDEO ADDRESSING
AH = 12h
BL = 32h
AL = 00h enable video addressing
01h disable video addressing
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - GRAY-SCALE SUMMING
AH = 12h
BL = 33h
AL = 00h enable gray scale summing
01h disable gray scale summing
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION
AH = 12h
BL = 34h
AL = 00h enable alphanumeric cursor emulation
01h disable alphanumeric cursor emulation
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS) - DISPLAY-SWITCH INTERFACE
AH = 12h
BL = 35h
AL = 00h initial adapter video off
01h initial planar video on
02h switch active video off
03h switch inactive video on
80h *UNDOCUMENTED* set system board video active flag
ES:DX = buffer (128 byte save area if AL = 0, 2 or 3)
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, VGA) - VIDEO REFRESH CONTROL
AH = 12h
BL = 36h
AL = 00h enable refresh
01h disable refresh
Return: AL = 12h if function supported
---------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT - ???
AH = 12h
BX = 5500h ??? (used by ATI and TAXAN)
BX = 5502h ??? (used by ATI and TAXAN)
---------------------------------------------
INT 10 - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA)
AH = 13h
AL = mode
bit 1: set if string contains alternating characters and attributes
bit 0: set in order to move cursor after write
BL = attribute if AL bit 1 clear
BH = display page number
DH,DL = row,column of starting cursor position
CX = length of string
ES:BP -> start of string
Note: recognizes CR, LF, BS, and bell
---------------------------------------------
INT 10 - VIDEO - LOAD USER-SPECIFIED LCD CHARACTER FONT (CONVERTIBLE)
AX = 1400h
ES:DI -> character font
BH = number of bytes per character
BL = 00h load main font (block 0)
01h load alternate font (block 1)
CX = number of characters to store
DX = character offset into RAM font area
---------------------------------------------
INT 10 - VIDEO - LOAD SYSTEM ROM DEFAULT LCD CHARACTER FONT (CONVERTIBLE)
AX = 1401h
BL = 00h load main font (block 0)
01h load alternate font (block 1)
---------------------------------------------
INT 10 - VIDEO - SET MAPPING OF LCD HIGH INTENSITY ATTRIBUTES (CONVERTIBLE)
AX = 1402h
BL = 00h ignore high intensity attribute
01h map high intensity to underscore
02h map high intensity to reverse video
03h map high intensity to selected alternate font
---------------------------------------------
INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE)
AH = 15h
Return: AX = alternate display adapter type
0000h none
5140h LCD
5153h CGA
5151h mono
ES:DI -> parameter table (see below)
Format of display parameter table:
Offset Size Description
00h WORD monitor model number
02h WORD vertical pixels per meter
04h WORD horizontal pixels per meter
06h WORD total vertical pixels
08h WORD total horizontal pixels
0Ah WORD horizontal pixel separation in micrometers
0Ch WORD vertical pixel separation in micrometers
---------------------------------------------
INT 10 - VIDEO - SET SUPERIMPOSE MODE (Sperry PC)
AH = 15h
AL = superimpose mode
00h show graphics screen
01h show text screen
02h show text screen superimposed on graphics screen
---------------------------------------------
INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA)
AH = 1Ah
AL = 00h read display combination code
Return: BL = active display code (see below)
BH = alternate display code
01h set display combination code
BL = active display code (see below)
BH = alternate display code
Return: AL = 1Ah if function was supported
Values of display combination codes:
00h no display
01h monochrome adapter w/ monochrome display
02h CGA w/ color display
03h reserved
04h EGA w/ color display
05h EGA w/ monochrome display
06h PGA w/ color display
07h VGA w/ monochrome analog display
08h VGA w/ color analog display
09h reserved
0Ah MCGA w/ digital color display
0Bh MCGA w/ monochrome analog display
0Ch MCGA w/ color analog display
FFh unknown display type
---------------------------------------------
INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA)
AH = 1Bh
BX = implementation type
= 0000h return funtionality/state information
ES:DI -> 64 byte buffer for state information (see below)
Return: AL = 1Bh if function supported
ES:DI buffer filled with state information
Format of state information:
Offset Size Description
00h DWORD address of static funtionality table (see below)
04h BYTE video mode in effect
05h WORD number of columns
07h WORD length of regen buffer in bytes
09h WORD starting address of regen buffer
0Bh WORD cursor position for page 0
0Dh WORD cursor position for page 1
0Fh WORD cursor position for page 2
11h WORD cursor position for page 3
13h WORD cursor position for page 4
15h WORD cursor position for page 5
17h WORD cursor position for page 6
19h WORD cursor position for page 7
1Bh WORD cursor type
1Dh BYTE active display page
1Eh WORD CRTC port address
20h BYTE current setting of register (3?8)
21h BYTE current setting of register (3?9)
22h BYTE number of rows
23h WORD bytes/character
25h BYTE DCC of active display
26h BYTE DCC of alternate display
27h WORD number of colors supported in current mode
29h WORD number of pages supported in current mode
2Ah BYTE number of scan lines active
(0,1,2,3) = (200,350,400,480)
2Bh BYTE primary character block
2Ch BYTE secondary character block
2Dh BYTE miscellaneous flags
bit 0 all modes on all displays on
1 gray summing on
2 monochrome display attached
3 default palette loading disabled
4 cursor emulation enabled
5 0 = intensity; 1 = blinking
6 reserved
7 reserved
2Eh 3 BYTEs reserved
31h BYTE video memory available
00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K
32h BYTE save pointer state flags
bit 0 512 character set active
1 dynamic save area present
2 alpha font override active
3 graphics font override active
4 palette override active
5 DCC override active
6 reserved
7 reserved
33h 13 BYTEs reserved
Format of Static Functionality Table:
Offset Size Description
00h BYTE modes supported #1
bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported
01h BYTE modes supported #2
bit 0 to bit 7 = 1 modes 8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh supported
02h BYTE modes supported #3
bit 0 to bit 3 = 1 modes 10h,11h,12h,13h supported
bit 4 to bit 7 reserved
03h 4 BYTEs reserved
07h BYTE scan lines supported
bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
08h BYTE total number of character blocks available in text modes
09h BYTE maximum number of active character blocks in text modes
0Ah BYTE miscellaneous function flags #1
bit 0 all modes on all displays function supported
1 gray summing function supported
2 character font loading function supported
3 default palette loading enable/disable supported
4 cursor emulation function supported
5 EGA palette present
6 color palette present
7 color paging function supported
0Bh BYTE miscellaneous function flags #2
bit 0 light pen supported
1 save/restore state function 1Ch supported
2 intensity blinking function supported
3 Display Combination Code supported
4-7 reserved
0Ch WORD reserved
0Eh BYTE save pointer function flags
bit 0 512 character set supported
1 dynamic save area supported
2 alpha font override supported
3 graphics font override supported
4 palette override supported
5 DCC extension supported
6 reserved
7 reserved
0Fh BYTE reserved
---------------------------------------------
INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
AH = 1Ch
AL = 00h return state buffer size
Return: BX = number of 64 byte blocks needed
01h save video state
ES:BX -> buffer
02h restore video state
ES:BX -> buffer containing previously saved state
CX = requested states
bit 0 video hardware
1 BIOS data areas
2 color registers and DAC state
3-15 reserved
Return: AL = 1Ch if function supported
---------------------------------------------
INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX)
AH = 40h
---------------------------------------------
INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX)
AH = 41h
---------------------------------------------
INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX)
AH = 42h
---------------------------------------------
INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX)
AH = 43h
AL = page number (0,1)
---------------------------------------------
INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX)
AH = 44h
AL = drawing function
00h clear pixels
01h set pixels
02h invert pixels
---------------------------------------------
INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX)
AH = 45h
AL = page number (0,1)
---------------------------------------------
INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX)
AH = 46h
DI = x (0-720)
BP = y (0-347)
Note: function 44h determines operation and function 43h which page to use
---------------------------------------------
INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX)
AH = 47h
DI = x (0-720)
BP = y (0-347)
Return: AL = 00h pixel clear
AL = 01h pixel set
Note: function 43h specifies which page is used
---------------------------------------------
INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX)
AH = 48h
DI = x (0-720)
BP = y (0-347)
---------------------------------------------
INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX)
AH = 49h
DI = x (0-720)
BP = y (0-347)
Note: function 48h or 49h specify first point, 44h operation and 43h page
to use
---------------------------------------------
INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX)
AH = 4Ah
---------------------------------------------
INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX)
AH = 4Bh
AL = character to display
DI = x (0-720)
BP = y (0-347)
Note: Unlike the other BIOS character functions character position is
specified in pixels rather than rows and columns.
---------------------------------------------
INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX)
AH = 4Ch
???
---------------------------------------------
INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX)
AH = 4Dh
???
---------------------------------------------
INT 10 - VIDEO - FILL AREA (Hercules GRAFIX)
AH = 4Eh
---------------------------------------------
INT 10 - SCROLOCK.COM - INSTALLATION CHECK
AH = 50h
Return: BX = 1954h if installed
AL = 00 if inactive, nonzero if active
Note: SCROLOCK is a utility supplied with System Enhancement Associates' ARC
---------------------------------------------
INT 10 - SCROLOCK.COM - ENABLE/DISABLE
AH = 51h
AL = state
00h disable
nonzero enable
Note: SCROLOCK is a utility supplied with System Enhancement Associates' ARC
---------------------------------------------
INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
AX = 6A00h
BX = 0000h
CX = 0000h
DX = buffer length (may be 0)
ES:DI -> buffer
Return: BX = number of bytes stored in buffer
CX = bytes required for all descriptions (0 if no DGIS)
Note: buffer contains descriptions and addresses of DGIS-compatible display(s)
and printer(s)
---------------------------------------------
INT 10 - DGIS - REDIRECT CHARACTER OUTPUT
AX = 6A01h
CX = 0000h
ES:DI = address of device to send INT 10 output to
Return: CX = 0000h output could not be redirected
else INT 10h output now routed to requested display
---------------------------------------------
INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
AX = 6A02h
ES:DI = 0000h:0000h
Return: ES:DI = 0000h:0000h if current display is non-DGIS
else address of the current DGIS INT 10 display
---------------------------------------------
INT 10 - VIDEO - INSTALLATION CHECK (Video7 VGA,VEGA VGA)
AX = 6F00h
Return: BX = 5637h ('V7') indicates Video7 VGA/VEGA VGA extensions are present
---------------------------------------------
INT 10 - VIDEO - GETINFO (Video7 VGA,VEGA VGA)
AX = 6F01h
Return: AL = monitor type code (VEGA VGA only)
AH = status register information
bit 0 = display enable
0 = display enabled
1 = vertical or horizontal retrace in progress
bit 1 = light pen flip flop set
bit 2 = light pen switch activated
bit 3 = vertical sync
bit 4 = monitor resolution
0 = high resolution (>200 lines)
1 = low resolution (<=200 lines)
bit 5 = display type
0 = color
1 = monochrome
bits6,7= diagnostic bits
Note: bits 0-3 are the same as the EGA/VGA status register bits 0-3
---------------------------------------------
INT 10 - VIDEO - GET MODE AND SCREEN RESOLUTION (Video7 VGA, VEGA VGA)
AX = 6F04h
Return: AL = current video mode (see AX=6F05h)
BX = horizontal columns (text) or pixels (graphics)
CX = vertical columns (text) or pixels (graphics)
---------------------------------------------
INT 10 - VIDEO - SET VIDEO MODE (Video7 VGA, VEGA EXTENDED EGA/VGA)
AX = 6F05h
BL = mode (graphics mode if graphics resolution listed)
text pixel graphic color disp scrn system
resol box resoltn page addr
00h-13h = standard IBM modes
40h = 80x43 8x8 Video7/VEGA VGA
41h = 132x25 8x14 Video7/VEGA VGA
42h = 132x43 8x8 Video7/VEGA VGA
43h = 80x60 8x8 Video7/VEGA VGA
44h = 100x60 8x8 Video7/VEGA VGA
45h = 132x28 8x8 Video7/VEGA VGA
60h = 752x410 16 Video7 VGA, VEGA VGA
61h = 720x540 16 Video7 VGA, VEGA VGA
62h = 800x600 16 Video7 VGA, VEGA Ext EGA
63h = 1024x768 2 Video7 VGA
64h = 1024x768 4 Video7 VGA
65h = 1024x768 16 Video7 VGA, VEGA Ext EGA
66h = 640x400 256 Video7 VGA, VEGA Ext VGA
67h = 640x480 256 Video7 VGA, VEGA Ext VGA
68h = 720x540 256 Video7 VGA, VEGA Ext VGA
69h = 800x600 256 Video7 VGA, VEGA Ext VGA
70h = 752x410 16gray Video7 VGA, VEGA VGA
71h = 720x540 16gray Video7 VGA, VEGA VGA
72h = 800x600 16gray Video7 VGA
73h = 1024x768 2gray Video7 VGA
74h = 1024x768 4gray Video7 VGA
75h = 1024x768 16gray Video7 VGA
76h = 640x400 256gray Video7 VGA
77h = 640x480 256gray Video7 VGA
78h = 720x540 256gray Video7 VGA
79h = 800x600 256gray (future)
---------------------------------------------
INT 10 - VIDEO - SELECT AUTOSWITCH MODE (V7VGA,VEGA VGA)
AX = 6F06h
BL = Autoswitch mode select
00h select EGA/VGA-only modes
01h select Autoswitched VGA/EGA/CGA/MGA modes
02h select 'bootup' CGA/MGA modes
BH = enable/disable (00h enable, 01h = disable selection)
---------------------------------------------
INT 10 - VIDEO - GET VIDEO MEMORY CONFIGURATION (V7VGA,VEGA VGA)
AX = 6F07h
Return: AL = 6Fh
AH = bits 0-6 = number of 256K blocks of video memory
bit 7 = DRAM/VRAM (0: DRAM, 1: VRAM)
BH = chip revision (SR8F) (S/C Chip in VEGA VGA)
BL = chip revision (SR8E) (G/A Chip in VEGA VGA)
CX = 0000h
---------------------------------------------
INT 10 - VIDEO - GET VIDEO RAM ADDRESS (TANDY 1000)
AH = 70h
Return: AX = segment address of the following
[BX] = offset address of green plane
[CX] = segment address of green plane
[DX] = segment address of red/blue plane
(red offset = 0, blue offset = 4000)
---------------------------------------------
INT 10 - VIDEO - GET INCRAM ADDRESSES (TANDY 1000)
AH = 71h
Return: AX = segment address of the following
[BX] = segment address of INCRAM
[CX] = offset address of INCRAM
---------------------------------------------
INT 10 - VIDEO - SCROLL SCREEN RIGHT (TANDY 1000)
AH = 72h
AL = number of columns blanked at left of window
00h = blank entire window
BH = attributes to be used on blank columns
CH,CL = row, column of upper left corner of window
DH,DL = row, column of lower right corner
--------------------------------------------
INT 10 - VIDEO - SCROLL SCREEN LEFT (TANDY 1000)
AH = 73h
AL = number of columns blanked at right of window
00h = blank entire window
BH = attributes to be used on blank columns
CH,CL = row, column of upper left corner of window
DH,DL = row, column of lower right corner
---------------------------------------------
INT 10 - VIDEO (DESQview 2.0x only) - internal - SET ??? HANDLER
AH = 80h
DX = 4456h ('DV')
ES:DI -> FAR subroutine to be called on ???
Return: DS = segment of DESQview data structure for video buffer
Note: this function is probably meant for internal use only, due to the magic
value required in DX
the subroutine seems to be called when the DESQview menu is accessed;
on entry, AL = 3 or 4
---------------------------------------------
INT 10 - VIDEO (DESQview 2.0x only) - internal - GET ???
AH = 81h
DX = 4456h ('DV')
Return: ES = segment of DESQview data structure for video buffer
BYTE ES:[0] = current window number in DV 2.0x
Note: this function is probably meant for internal use only, due to the magic
value required in DX
---------------------------------------------
INT 10 - VIDEO (DESQview 2.0x only) - internal - GET CURRENT WINDOW INFO
AH = 82h
DX = 4456h ('DV')
Return: DS = segment in DESQview for data structure
in DV 2.00,
BYTE DS:[0] = window number
WORD DS:[1] = segment of other data structure
WORD DS:[3] = segment of window's object handle
ES = segment of DESQview data structure for video buffer
AL = current window number
AH = ???
BL = direct screen writes
00h program does not do direct writes
01h program does direct writes, so shadow buffer not usable
BH = ???
CL = current video mode
CH = ???
Note: this function is probably meant for internal use only, due to the magic
value required in DX
---------------------------------------------
INT 10 - VIDEO - Compaq Portable Extensions - SELECT EXTERNAL MONITOR
AX = BF00h
Note: all registers preserved and the internal monitor is blanked
the external monitor becomes the active monitor
---------------------------------------------
INT 10 - VIDEO - Compaq Portable Extensions - SELECT INTERNAL MONITOR
AX = BF01h
Note: all registers preserved and the external monitor is blanked
the internal monitor becomes the active monitor
---------------------------------------------
INT 10 - VIDEO - Compaq Portable Extensions - SET MASTER MODE OF CURRENT CTRLR
AX = BF02h
BH = master mode
04h CGA
05h EGA
07h MDA
---------------------------------------------
INT 10 - VIDEO - Compaq Portable Extensions - GET ENVIRONMENT
AX = BF03h
BX = 0000h
Return: BH = active monitor
00h = external
01h = internal
BL = master mode
00h = switchable VDU not present
04h = CGA
05h = EGA
07h = MDA
CH = 00h (reserved)
CL = switchable VDU mode supported
bit 0 = CGA supported
bits 1,2 = reserved (1)
bit 3 = MDA supported
bits 4-7 = reserved (1)
DH = internal monitor type
00h = none
01h = Dual-mode monitor
02h = 5153 RGB monitor
03h = Compaq Color monitor
04h = 640x400 flat panel
DL = external monitor type
00h = none
01h = dual-mode monitor
02h = 5153 RGB monitor
03h = Compaq Color monitor
04h = 640x400 flat panel
---------------------------------------------
INT 10 - VIDEO - Compaq Portable Extensions - SET MODE SWITCH DELAY
AX = BF04h
BH = 00h enable delay
01h disable delay
---------------------------------------------
INT 10 - VIDEO - MSHERC.COM - INSTALLATION CHECK???
AH = EFh
Return: DX = ???
Note: MSHERC.COM is a program included with the PC Tech Journal high-level
benchmark suite that adds video modes 08h and 88h for Hercules cards,
and supports text in the new graphics modes.
---------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ ONE REGISTER
AH = F0h
BL = register number
DX = group index
Pointer/data chips
00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
08h Sequencer (5 registers) 3C4h
10h Graphics Controller (9 registers) 3CEh
18h Attribute Controller (20 registers) 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color modes)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
Return: BL = data
---------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - WRITE ONE REGISTER
AH = F1h
DX = group index (see AH=F0h)
BL = register number
BH = value to write
Return: BL = data
---------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ REGISTER RANGE
AH = F2h
CH = starting register number
CL = Number of registers (>1)
DX = group index
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
ES:BX -> buffer, CL bytes
---------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER RANGE
AH = F3h
CH = starting register
CL = number of registers (>1)
DX = group index (see AH=F2h)
ES:BX -> buffer, CL bytes
---------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET
AH = F4h
CX = number of registers to read (>1)
ES:BX -> table of records (see below)
Return: register values in table filled in
Format of entries in table of register records:
Offset Size Description
00h WORD group index
Pointer/data chips
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
02h BYTE register number (0 for single registers)
03h BYTE register value
---------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER SET
AH = F5h
CX = number of registers to write (>1)
ES:BX -> table of records (see AH=F4h)
--------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - REVERT TO DEFAULT REGISTERS
AH = F6h
--------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - DEFINE DEFAULT REGISTER TABLE
AH = F7h
DX = port number
Pointer/data chips
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color modes)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
ES:BX -> table of one-byte entries, one byte to be written to each
register
--------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - INTERROGATE DRIVER
AH = FAh
BX = 0000h
Return: BX = 0000h if mouse driver not present
ES:BX -> EGA Register Interface version number, if present:
byte 0 = major release number
byte 1 = minor release number
--------------------------------------------
INT 10 - FASTBUFF.COM - INSTALLATION CHECK
AH = FAh
Return: AX = 00FAh if installed
ES = segment of resident code
Note: FASTBUFF.COM is a keyboard speedup/screen blanking utility by
David Steiner
--------------------------------------------
INT 10 - VIDEO (TopView) - GET VIDEO BUFFER
AH = FEh
ES:DI = segment:offset of assumed video buffer
Return: ES:DI = segment:offset of actual video buffer
---------------------------------------------
INT 10 - VIDEO (TopView) - UPDATE REAL SCREEN FROM VIDEO BUFFER
AH = FFh
CX = number of sequential characters that have been modified
DI = offset of first character that has been modified
ES = segment of video buffer
Note: avoid CX=0
---------------------------------------------
INT 11 - EQUIPMENT DETERMINATION
Return: AX = equipment flag bits
0 diskette installed
1 8087 present
2 mouse installed (PS2 only)
2,3 number of 16K banks of RAM on motherboard (PC only)
number of 64K banks of RAM on motherboard (XT only)
always = 11 on AT and above
4,5 initial video mode
01 = 40x25 color
10 = 80x25 color
11 = 80X25 IBM monochrome
6,7 number of diskette drives (only if bit 0 = 1)
00 = 1, 01 = 2, 10 = 3, 11 = 4
8 0 = DMA present, 1 = no DMA on system (PCjr)
9-11 number of RS232 cards
12 game I/O attached
13 serial printer installed (PCjr)
internal modem installed (PC/Convertible)
14,15 number of printers
---------------------------------------------
INT 12 - MEMORY SIZE
Return: AX = number of contiguous 1K blocks of memory
---------------------------------------------
INT 13 - DISK - RESET DISK SYSTEM
AH = 00h
DL = drive (if bit 7 is set both hard disks and floppy disks reset)
---------------------------------------------
INT 13 - DISK - STATUS OF DISK SYSTEM
AH = 01h
Return: AL = status of last disk operation
00h = successful completion
01h = bad command
02h = address mark not found
03h = write attempted on write-protected disk
04h = sector not found
05h = reset failed (hard disk)
06h = diskette changed
07h = parameter act. failed (hard disk)
08h = DMA overrun (floppy disk)
09h = DMA across 64K boundary
0Ah = bad sector detected (hard disk)
0Bh = bad track detected (hard disk)
0Ch = unsupported track
0Dh = invalid number of sectors on format (hard disk)
0Eh = control data address mark detected (hard disk)
0Fh = DMA arbitration error (hard disk)
10h = bad CRC/ECC
11h = data ECC corrected (hard disk)
20h = controller failure
40h = seek failed
80h = time out
AAh = drive not ready (hard disk)
BBh = undefined error (hard disk)
CCh = write fault (hard disk)
E0h = status register error (hard disk)
FFh = sense operation failed (hard disk)
---------------------------------------------
INT 13 - DISK - READ SECTORS INTO MEMORY
AH = 02h
AL = number of sectors to read
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
ES:BX -> buffer to fill
Return: CF set on error
AH = status (see AH=01h)
AL = number of sectors read
---------------------------------------------
INT 13 - DISK - WRITE SECTORS FROM MEMORY
AH = 03h
AL = number of sectors to write
CH = track (if hard disk, bits 8,9 in high bits of CL)
CL = sector (if hard disk, high two bits are high bits of track #)
DH = head
DL = drive
ES:BX -> buffer
Return: CF set on error
AH = status (see AH=01h)
AL = number of sectors written
---------------------------------------------
INT 13 - DISK - VERIFY SECTORS
AH = 04h
AL = number of sectors to verify
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
Return: CF set on error
AH = status (see AH=01h)
AL = number of sectors verified
---------------------------------------------
INT 13 - FLOPPY - FORMAT TRACK
AH = 05h
AL = number of sectors to create on this track
CH = track
CL = sector
DH = head
DL = drive
ES:BX -> array of 4-byte address fields
byte 1 = track
byte 2 = head
byte 3 = sector
byte 4 = bytes/sector 0=128, 1=256, 2=512, 3=1024
Return: CF set if error occurred
AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - FORMAT TRACK
AH = 05h
AL = interleave value (XT only)
ES:BX = 512-byte format buffer
the first 2*(sectors/track) bytes contain F,N for each sector
F = 00 for good sector, 80h for bad sector
N = sector number
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
AH = 06h
AL = interleave value
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
AH = 07h
AL = interleave value (XT only)
ES:BX = 512-byte format buffer (see AH=05h)
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=01h)
---------------------------------------------
INT 13 - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
AH = 08h
DL = drive number
Return: CF set on error
AH = status code (see AH=01h)
BL = drive type (see AH=17h) (AT/PS2 floppies only)
DL = number of consecutive acknowledging drives
DH = maximum value for head number
CL = maximum value fo sector number
CH = maximum value for cylinder number
ES:DI = drive parameter table
---------------------------------------------
INT 13 - FIXED DISK - INITIALIZE TWO FIXED DISK BASE TABLES (XT,AT,XT286,PS)
AH = 09h
Return: CF set on error
AH = status code (see AH=01h)
INT 41h points to table for drive 0
INT 46h points to table for drive 1
---------------------------------------------
INT 13 - FIXED DISK - READ LONG (XT,AT,XT286,PS)
AH = 0Ah
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
CL = sector
ES:BX -> buffer to fill
Return: CF set on error
AH = status code (see AH=01h)
AL = number of sectors read
Note: used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - FIXED DISK - WRITE LONG (XT,AT,XT286,PS)
AH = 0Bh
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
CL = sector
ES:BX -> buffer containing data
Return: CF set on error
AH = status code (see AH=01h)
AL = number of sectors written
Note: used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - FIXED DISK - SEEK TO CYLINDER (XT,AT,XT286,PS)
AH = 0Ch
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
Return: CF set on error
AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - ALTERNATE DISK RESET (XT,AT,XT286,PS)
AH = 0Dh
DL = drive ID
Return: CF set on error
AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - READ SECTOR BUFFER (XT,PS)
AH = 0Eh
ES:BX -> buffer
Return: CF set on error
AH = status code (see AH=01h)
Notes: transfers controller's sector buffer. No data is read from the drive
used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - FIXED DISK - WRITE SECTOR BUFFER (XT,PS)
AH = 0Fh
ES:BX -> buffer
Return: CF set on error
AH = status code (see AH=01h)
Notes: should be called before formatting to initialize the controller's
sector buffer.
used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - FIXED DISK - TEST FOR DRIVE READY (XT,AT,XT286,PS)
AH = 10h
DL = drive ID
Return: CF set on error
AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - RECALIBRATE DRIVE (XT,AT,XT286,PS)
AH = 11h
DL = drive ID
Return: CF set on error
AH = status code (see AH=01h)
---------------------------------------------
INT 13 - FIXED DISK - CONTROLER RAM DIAGNOSTIC (XT,PS)
AH = 12h
Return: CF set on error
AH = status code (see AH=01h)
Note: used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - FIXED DISK - DRIVE DIAGNOSTIC (XT,PS)
AH = 13h
Return: CF set on error
AH = status code (see AH=01h)
Note: used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - FIXED DISK - CONTROLLER DIAGNOSTICS (XT,AT,XT286,PS)
AH = 14h
Return: CF set on error
AH = status code (see AH=01h)
Note: used for diagnostics only on PS/2 systems
---------------------------------------------
INT 13 - DISK - GET TYPE (AT,XT2,XT286,CONV,PS)
AH = 15h
DL = drive ID
Return: CF set on error
AH = disk type
00h = disk not there
01h = floppy, no change detection present
02h = floppy with change detection
03h = fixed disk
CX:DX = number of 512-byte sectors
---------------------------------------------
INT 13 - FLOPPY DISK - CHANGE OF DISK STATUS (AT,XT2,XT286,CONV,PS)
AH = 16h
DL = drive to check
Return: AH = disk change status
00h = no disk change
06h = disk changed
---------------------------------------------
INT 13 - DISK - SET TYPE (AT,XT2,XT286,CONV,PS)
AH = 17h
AL = disk type
00h = no disk
01h = regular disk in regular drive
02h = regular disk in high-capacity drive
03h = high-capacity disk in high-capacity drive
04h = 720K disk in 720K drive
DL = drive ID
---------------------------------------------
INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
AH = 18h
DL = drive number
CH = lower 8 bits of number of tracks
CL = sectors per track (bits 0-5)
top 2 bits of number of tracks (bits 6,7)
Return: AH = 00h requested combination supported
01h function not available
0Ch not supported or drive type unknown
80h there is no disk in the drive
ES:DI -> 11-byte parameter table
---------------------------------------------
INT 13 - FIXED DISK - PARK HEADS (XT286,PS)
AH = 19h
DL = drive
Return: CF set on error
AH = status (see AH=01h)
---------------------------------------------
INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
AH = 1Ah
AL = defect table count
CL = format modifiers
bit 4: generate periodic interrupt
bit 3: perform surface analysis
bit 2: update secondary defect map
bit 1: ignore secondary defect map
bit 0: ignore primary defect map
DL = drive
ES:BX -> defect table
Return: CF set on error
AH = status (see AH=01h)
Note: if periodic interrupt selected, INT 15h/AH=0Fh is called after each
cylinder is formatted
---------------------------------------------
INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER
AH = 1Bh
AL = number of record
DL = drive
ES:BX -> buffer for manufacturing header (defect list)
Return: CF set on error
AH = status
Note: manufacturing header format (Defect Map Record format) can be found
in IBM 70MB, 115MB Fixed Disk Drives Technical Reference
---------------------------------------------
INT 13 - ESDI FIXED DISK - GET DEVICE CONFIGURATION
AX = 1C0Ah
DL = drive
ES:BX -> buffer for device configuration (drive physical parameter)
Return: CF set on error
AH = status
Note: device configuration format can be found in IBM ESDI Fixed Disk Drive
Adapter/A Technical Reference
---------------------------------------------
INT 13 - ESDI FIXED DISK - GET ADAPTER CONFIGURATION
AX = 1C0Bh
ES:BX -> buffer for adapter configuration
Return: CF set on error
AH = status
---------------------------------------------
INT 13 - ESDI FIXED DISK - GET POS INFORMATION
AX = 1C0Ch
ES:BX -> POS information
Return: CF set on error
AH = status
---------------------------------------------
INT 13 - ESDI FIXED DISK - TRANSLATE RBA TO ABA
AX = 1C0Eh
CH = low 8 bits of cylinder number
CL = sector number, high two bits of cylinder number in bits 6 and 7
DH = head number
DL = drive number
ES:BX -> ABA number
Return: CF set on error
AH = status
Note: ABA (absolute block address) format can be found in IBM ESDI Adapter
Technical Reference by using it's Device Configuration Status Block
---------------------------------------------
INT 13 - DISK - ??? (Western Digital "Super BIOS")
AH = 20h
???
Return: ???
Note: seems to return some kind of status
---------------------------------------------
INT 14 - SERIAL I/O - INITIALIZE USART
AH = 00h
AL = initializing parameters
7 - 6 - 5 4 - 3 2 1 - 0
-BAUD RATE- PARITY STOP WORD
BITS LENGTH
000 110 bd 00 none 0: 1 00: 5
001 150 bd 01 odd 1: 2 01: 6
010 300 bd 11 even 10: 7
011 600 bd 11: 8
100 1200 bd
101 2400 bd
110 4800 bd
111 9600 bd (4800 on PCjr)
DX = port number (0-3)
Return: AH = RS-232 status code bits
0: data ready
1: overrun error
2: parity error
3: framing error
4: break detected
5: transmission buffer register empty
6: transmission shift register empty
7: time out--if set, other bits invalid
AL = modem status bits
0: delta Clear-To-Send
1: delta Data-Set-Ready
2: trailing edge of ring detected
3: change in receive line signal detected
4: Clear-To-Send
5: Data-Set-Ready
6: ring detected
7: receive line signal detected
---------------------------------------------
INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
AH = 00h
AL = initializing parameters
7 - 6 - 5 4 - 3 2 1 - 0
-BAUD RATE- PARITY STOP WORD
BITS LENGTH
000 19200 bd 00 none 0: 1 00: 5
001 38400 bd 01 odd 1: 2 01: 6
010 300 bd 11 even 10: 7
011 600 bd 11: 8
100 1200 bd
101 2400 bd
110 4800 bd
111 9600 bd (4800 on PCjr)
DX = port number (0-3 or FFh if only performing non-I/O setup)
Return: AH = RS-232 status code bits
0: RDA - input data is available in buffer
1: OVRN - data has been lost
5: THRE - room is available in output buffer
6: TSRE - output buffer empty
AL = modem status bits
3: always 1
7: DCD - carrier detect
---------------------------------------------
INT 14 - SERIAL I/O - TRANSMIT CHARACTER
AH = 01h
AL = character
DX = port number (0-3)
Return: AX = port status (see AH=00h)
---------------------------------------------
INT 14 - SERIAL I/O - RECEIVE CHARACTER
AH = 02h
DX = port number (0-3)
Return: AL = character received
AH = RS-232 status code (see AH=00h)
Note: will timeout if DSR is not asserted, even if function 03h returns
data ready
---------------------------------------------
INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
AH = 02h
DX = port number (0-3)
Return: AL = character received
AH = 00h
---------------------------------------------
INT 14 - SERIAL I/O - GET USART STATUS
AH = 03h
DX = port number (0-3)
Return: AX = port status code (see AH=00h)
---------------------------------------------
INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)
AH = 04h
AL = break status
00h if break
01h if no break
BH = parity
00h no parity
01h odd parity
02h even parity
03h stick parity odd
04h stick parity even
BL = number of stop bits
00h one stop bit
01h two stop bits (1.5 if 5 bit word length)
CH = word length
00h 5 bits
01h 6 bits
02h 7 bits
03h 8 bits
CL = bps rate
00h 110
01h 150
02h 300
03h 600
04h 1200
05h 2400
06h 4800
07h 9600
08h 19200
DX = port number
Return: AX = port status code (see AH=00h)
---------------------------------------------
INT 14 - FOSSIL - INITIALIZE DRIVER
AH = 04h
DX = port number
optionally BX=4F50h
ES:CX -> byte to be set upon ^C
Return: AX = 1954h (if successful)
BL = maximum function number supported (excluding 7Eh and above)
BH = revision of FOSSIL supported
DTR is raised
Note: the word at offset 6 in the interrupt handler contains 1954h, and the
following byte contains the maximum function number supported
---------------------------------------------
INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
AH = 05h
AL = 00h read modem control register
Return: BL = modem control register (see below)
AH = status
AL = 01h write modem control register
BL = modem control register
bit 0: data terminal ready
bit 1: request to send
bit 2: OUT1
bit 3: OUT2
bit 4: LOOP
bits 5-7 reserved
Return: AX = status
DX = port number
---------------------------------------------
INT 14 - FOSSIL - DEINITIALIZE DRIVER
AH = 05h
DX = port number
Return: none
DTR is not affected
---------------------------------------------
INT 14 - FOSSIL - RAISE/LOWER DTR
AH = 06h
DX = port
AL = DTR state to be set
00h = lower
01h = raise
---------------------------------------------
INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
AH = 07h
Return: AL = timer tick interrupt number
AH = ticks per second on interrupt number in AL
DX = approximate number of milliseconds per tick
---------------------------------------------
INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
AH = 08h
DX = port number
---------------------------------------------
INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
AH = 09h
DX = port number
---------------------------------------------
INT 14 - FOSSIL - PURGE INTPUT BUFFER THROWING AWAY ALL PENDING INPUT
AH = 0Ah
DX = port number
---------------------------------------------
INT 14 - FOSSIL - TRANSMIT NO WAIT
AH = 0Bh
AL = character
DX = port number
Return: AX = 0000h character not accepted
= 0001h character accepted
---------------------------------------------
INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
AH = 0Ch
DX = port number
Return: AX = FFFFh character not available
AX = 00xxh character xx available
---------------------------------------------
INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
AH = 0Dh
Return: AX = FFFFh character not available
= xxyyh standard IBM-style scan code
---------------------------------------------
INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
AH = 0Eh
Return: AX = xxyyh standard IBM-style scan code
---------------------------------------------
INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
AH = 0Fh
AL = bit mask describing flow control requested
0: xon/xoff on transmit (watch for xoff while sending)
1: CTS/RTS (CTS on transmit/RTS on receive)
2: reserved
3: xon/xoff on receive (send xoff when buffer near full)
4-7: all 1
DX = port number
---------------------------------------------
INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
AH = 10h
AL = bit mask
0: enable/disable ^C/^K checking
1: enable/disable the transmitter
DX = port number
---------------------------------------------
INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
AH = 11h
DH = row
DL = column
Note: this is the same as INT 10/AH=02h
---------------------------------------------
INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
AH = 12h
Return: DH = row
DL = column
Note: this is the same as INT 10/AH=03h
---------------------------------------------
INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
AH = 13h
AL = character
Note: should not be called if it is unsafe to call DOS
---------------------------------------------
INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
AH = 14h
AL = 01h enable watchdog
00h disable watchdog
DX = port number
---------------------------------------------
INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
AH = 15h
AL = character
---------------------------------------------
INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
AH = 16h
AL = function
00h = delete
01h = add
ES:DX -> routine to call
Return: AX = 0000h successful
0001h unsuccessful
---------------------------------------------
INT 14 - FOSSIL - REBOOT SYSTEM
AH = 17h
AL = method
00h = cold boot
01h = warm boot
---------------------------------------------
INT 14 - FOSSIL - READ BLOCK
AH = 18h
CX = maximum number of characters to transfer
DX = port number
ES:DI -> user buffer
Return: AX = number of characters transfered
---------------------------------------------
INT 14 - FOSSIL - WRITE BLOCK
AH = 19h
CX = maximum number of characters to transfer
DX = port number
ES:DI -> user buffer
Return: AX = number of characters transfered
---------------------------------------------
INT 14 - FOSSIL - BREAK BEGIN OR END
AH = 1Ah
AL = 00h stop sending 'break'
01h start sending 'break'
DX = port number
---------------------------------------------
INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
AH = 1Bh
DX = port number
CX = size of user buffer
ES:DI -> user buffer for driver info (see below)
Return: AX = number of characters transferred
Format of driver info:
Offset Size Description
00h WORD size of structure in bytes
02h BYTE FOSSIL spec driver conforms to
03h BYTE revision level of this specific driver
04h DWORD pointer to ASCIZ identification string
08h WORD size of the input buffer
0Ah WORD number of bytes left in buffer
0Ch WORD size of the output buffer
0Eh WORD number of bytes left in buffer
10h BYTE width of screen
11h BYTE length of screen
12h BYTE actual baud rate, computer to modem
---------------------------------------------
INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
AH = 7Eh
AL = code assigned to external application
ES:DX -> entry point
Return: AX = 1954h
BL = code assigned to application (same as input AL)
DH = 00h failed
01h successful
---------------------------------------------
INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
AH = 7Fh
AL = code assigned to external application
ES:DX -> entry point
Return: AX = 1954h
BL = code assigned to application (same as input AL)
DH = 00h failed
01h successful
---------------------------------------------
INT 15 - CASSETTE - TURN ON MOTOR (PC,Jr)
AH = 00h
Return: CF set on error, AH = 86h if no cassette present
---------------------------------------------
INT 15 - VMiX v2+ - INSTALLATION CHECK???
AH = 00h
Return: DX = 0798h???
---------------------------------------------
INT 15 - CASSETTE - TURN OFF MOTOR (PC,Jr)
AH = 01h
Return: CF set on error, AH = 86h if no cassette present
---------------------------------------------
INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER
AH = 01h
STACK: WORD object ID of requestor
DWORD pointer to name of requested method
WORD arg1
WORD arg2
WORD arg3
WORD arg4
Return: DX:AX??? -> IRP structure or 0000h:0000h
---------------------------------------------
INT 15 - CASSETTE - READ DATA BLOCKS (PC,Jr)
AH = 02h
CX = count of bytes
ES:BX -> data area
Return: CF set on error
AH = status
01h CRC error
02h bad tape signals
04h no data
80h invalid command
86h no cassette present
DX = count of bytes read
ES:BX = pointer past last byte read
---------------------------------------------
INT 15 - VMiX - MEMORY OBJECT MANAGER
AH = 02h
STACK: WORD object ID of requestor
DWORD pointer to name of requested method
WORD arg1
WORD arg2
WORD arg3
WORD arg4
WORD arg5
Return: DX:AX??? = pointer to memory block
---------------------------------------------
INT 15 - CASSETTE - WRITE DATA BLOCKS (PC,Jr)
AH = 03h
CX = count of bytes to write
ES:BX -> data area
Return: CF set on error
AH = status (see AH=02h)
ES:BX = pointer past last byte written
CX = 0
---------------------------------------------
INT 15 - VMiX - PROMPTED CONSOLE INPUT
AH = 03h
STACK: DWORD pointer to ASCII prompt
WORD field outline character
WORD length of input field
DWORD address of pointer to input buffer
WORD number of characters input
Return: AX = length of input (input buffer is padded with blanks)
---------------------------------------------
INT 15 - VMiX - VPRINTF
AH = 04h
STACK: DWORD control string
DWORD array of arguments
---------------------------------------------
INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS
AH = 05h
Return: AX = process ID
---------------------------------------------
INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK
AH = 06h
STACK: WORD process ID
Return: DX:AX??? -> process control block
---------------------------------------------
INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK
AH = 07h
STACK: WORD object type
Return: DX:AX??? -> object control block
---------------------------------------------
INT 15 - VMiX - GET CHANNEL CONTROL BLOCK
AH = 08h
STACK: WORD channel ID
Return: DX:AX??? -> channel control block
---------------------------------------------
INT 15 - VMiX - GET ID OF QUEUED ELEMENT
AH = 09h
STACK: WORD queue ID (0 = process queue, 1 = object, 3 = type)
WORD subqueue ID
Return: AX = ID
---------------------------------------------
INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT
AH = 0Ah
STACK: WORD queue ID (0 = process queue, 1 = object, 3 = type)
WORD ID of current element in queue chain
Return: AX = ID of next element
---------------------------------------------
INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES
AH = 0Bh
Return: AX = number of active processes
---------------------------------------------
INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
AH = 0Ch
STACK: WORD process ID
Return: DX:AX??? -> TSS stack store
---------------------------------------------
INT 15 - VMiX - START A CHILD PROCESS JOB SHELL
AH = 0Dh
STACK: DWORD ASCIZ string starting with requested I/O channel and
followed by standard VMiX shell command string
Return: AX = status
---------------------------------------------
INT 15 - VMiX - TERMINATE PROCESS
AH = 0Eh
STACK: WORD process ID
Return: AX = status
---------------------------------------------
INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
AH = 0Fh
AL = phase code
00h reserved
01h surface analysis
02h formatting
Return: CF clear if formatting should continue, set if it should terminate
Note: called during ESDI drive formatting after each cylinder is completed
---------------------------------------------
INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT
AH = 0Fh
STACK: WORD queue ID (0 = process queue, 1 = object q, 3 = type q)
WORD ID of element in queue chain
Return: AX = key
---------------------------------------------
INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE
AH = 10h
STACK: DWORD pointer to function
N WORDs function args
Return: ???
---------------------------------------------
INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
AX = 1000h
Return: after other processes run
---------------------------------------------
INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
AX = 1001h
BX = number of bytes to allocate
Return: ES:DI -> block of memory
---------------------------------------------
INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
AX = 1002h
ES:DI -> previously allocated block
Return: block freed
---------------------------------------------
INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
AX = 1003h
BH = attribute
BL = character
DX = segment of object handle for window
Note: BX=0 does not display anything, it only positions the hardware cursor
---------------------------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
AH = 10h
AL = 04h thru 12h
Return: pops up "Programming error" window in DV 2.x
---------------------------------------------
INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
AX = 1013h
ES:DI -> FAR service routine
Return: BX = bit mask indicating which bit was allocated
0000h if no more bits available
---------------------------------------------
INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
AX = 1014h
BX = bit mask from INT 15/AX=1013h
---------------------------------------------
INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
AX = 1015h
BX = bit mask for interrupts to post
Return: indicated routines will be called: (DV 2.0x) at next task switch
(DV 2.2x) immediately
---------------------------------------------
INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
AX = 1016h
ES:DI = possible object handle
Return: BX = FFFFh if ES:DI is a valid object handle
0000h if ES:DI is not
---------------------------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
AX = 1017h
Return: pops up "Programming error" window in DV 2.x
---------------------------------------------
INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
AX = 1018h
BH = column
BL = row
ES = segment of object handle for window below which to search
0000h = start search with topmost window
Return: ES = segment of object handle for window which is visible at the
indicated position, or covered by indicated window
---------------------------------------------
INT 15 - TopView - "SOUND" - MAKE TONE
AX = 1019h
BX = frequency in Hertz
CX = duration in clock ticks (18.2 ticks/sec)
Return: immediately, tone continues to completion
Notes: if another tone is already playing, the new tone does not start until
completion of the previous one. In DV 2.00, it is possible to enqueue
about 32 tones before the process is blocked until a note completes.
in DV 2.00, the lowest tone allowed is 20 Hz
---------------------------------------------
INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
AX = 101Ah
Return: stack switched
---------------------------------------------
INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
AX = 101Bh
Return: task-switching temporarily disabled
Note: will not task-switch until END CRITICAL REGION (AX = 101Ch) called
---------------------------------------------
INT 15 - TopView - "ENDC" - END CRITICAL REGION
AX = 101Ch
Return: task-switching enabled
---------------------------------------------
INT 15 - TopView - "STOP" - STOP TASK
AX = 101Dh
ES = segment of object handle for task to be stopped
(== handle of main window for that task)
Return: indicated task will no longer get CPU time
Note: at least in DV 2.00, this function is ignored unless the indicated task
is the current task.
---------------------------------------------
INT 15 - TopView - "START" - START TASK
AX = 101Eh
ES = segment of object handle for task to be started
(== handle of main window for that task)
Return: indicated task is started up again
---------------------------------------------
INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
AX = 101Fh
BX = bit fields
bits 0-12: number of characters to display
bits 13,14: which mouse button may be pressed to remove window
00 = either
01 = left
10 = right
11 = either
bit 15: beep if 1
DS:DI -> text of message
CH = width of error window (0 = default)
CL = height of error window (0 = default)
DX = segment of object handle
Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
Note: window remains on-screen until ESC or indicated mouse button is pressed
---------------------------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.0x
AX = 1020h
Return: pops up "Programming error" window in DV 2.0x
---------------------------------------------
INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
AX = 1021h
BX = segment of object handle for task to interrupt
DX:CX -> FAR routine to jump to next time task is run
Return: nothing
Note: the current ES, DS, SI, DI, and BP are passed to the FAR routine
---------------------------------------------
INT 15 - TopView - "GETVER" - GET VERSION
AX = 1022h
BX = 0
Return: BX nonzero, TopView or compatible loaded
(BL = major version, BH = minor version)
Notes: TaskView returns BX = 0001h, DESQview 2.0 returns BX = 0A01h
---------------------------------------------
INT 15 - TopView - "POSWIN" - POSITION WINDOW
AX = 1023h
BX = segment of object handle for parent window within which to
position the window (0 = full screen)
ES = segment of object handle for window to be positioned
DL = bit flags
bits 0,1: horizontal position
00 = current
01 = center
10 = left
11 = right
bits 2,3: vertical position
00 = current
01 = center
10 = top
11 = bottom
bit 4: don't redraw screen if set
bits 5-7 not used
CH = number of columns to offset from position specified by DL
CL = number of rows to offset from position specified by DL
Return: nothing
---------------------------------------------
INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
AX = 1024h
BX = segment of object handle for window
(0 = use default)
Return: ES:DI -> virtual screen
CX = size of virtual screen in bytes
DL = 00h text screen
01h graphics screen
---------------------------------------------
INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
AX = 1025h
Return: stack switched back
Note: call only after INT 15h/AX=101Ah
---------------------------------------------
INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
AH = 10h
AL = 26h thru 2Ah
Return: pops up "Programming error" window in DV 2.x
---------------------------------------------
INT 15 - DESQview 2.0 (TopView???) - "POSTTASK" - AWAKEN TASK
AX = 102Bh
BX = segment of object handle for task
Return: nothing
---------------------------------------------
INT 15 - DESQview 2.0 (TopView???) - START NEW APPLICATION IN NEW PROCESS
AX = 102Ch
ES:DI -> contents of .PIF/.DVP file (see below)
BX = size of .PIF/.DVP info
Return: BX = segment of object handle for new task
0000h on error
Format of .PIF/.DVP file:
Offset Size Description
00h WORD reserved (0)
02h 30 BYTEs program title (blank-padded)
20h WORD maximum memory to allocate to partition in K
22h WORD minimum memory required in K
24h 64 BYTEs ASCIZ program pathname
64h BYTE default drive letter ('A',...)
65h 64 BYTEs ASCIZ default directory name
A5h 64 BYTEs ASCIZ program parameters
E5h BYTE initial screen mode (0-7)
E6h BYTE number of text pages used
E7h BYTE number of first interrupt to save
E8h BYTE number of last interrupt to save
E9h BYTE rows in virtual screen buffer
EAh BYTE columns in virtual screen buffer
EBh BYTE initial window position, row
ECh BYTE initial window position, column
EDh WORD system memory in K
EFh 64 BYTEs ASCIZ shared program name
12Fh 64 BYTEs ASCIZ shared program data file
16Fh BYTE flags1
bit 7: writes text directly to screen
bit 6: runs in foreground only
bit 5: uses math coprocessor
bit 4: accesses system keyboard buffer directly
bits 3-1: reserved (0)
bit 0: swappable
170h BYTE flags2
bit 6: uses command-line parameters in field at A5h
bit 5: swaps interrupt vectors
---information unique to .DVP files---
171h 2 BYTEs keys to use on open menu
173h WORD size of script buffer in bytes
175h WORD automatically give up CPU after this many tests for keyboard
input in one clock tick (0 = never)
177h BYTE nonzero = "uses own colors"
178h BYTE nonzero if application swappable
179h 3 BYTEs reserved (0)
17Ch BYTE nonzero to automatically close on exit
17Dh BYTE nonzero if copy-protect floppy is required
---information unique to DESQview 2.0+---
17Eh BYTE .DVP version number
00h DESQview 1.2+
01h DESQview 2.0+
02h DESQview 2.2+
17Fh BYTE reserved (0)
180h BYTE initial number of rows in physical window
181h BYTE initial number of columns in physical window
182h WORD maximum expanded memory to allow, in K
184h BYTE flags3
bit 7: automatically assign window position
bit 5: maximum memory value has been specified
bit 4: disallow "Close" command
bit 3: foreground-only when doing graphics
bit 2: don't virtualize
185h BYTE keyboard conflict level (0-4)
186h BYTE number of graphics pages used
187h WORD extra system memory size
189h BYTE initial screen mode (FFh = default)
---information unique to DESQview 2.2+---
18Ah BYTE serial port usage
FFh uses all serial ports
00h no serial ports
01h only COM1
02h only COM2
18Bh BYTE flags4
bit 7: automatically close application on exit if .COM or .EXE
specified
bit 6: swappable if not using serial ports
bit 3: virtualize text
bit 2: virtualize graphics
bit 1: share CPU when foreground
bit 0: share EGA when foreground and zoomed
18Ch BYTE protection level for 386 machines
18Dh 19 BYTEs reserved (0)
---------------------------------------------
INT 15 - DESQview 2.0 - KEYBOARD MOUSE CONTROL
AX = 102Dh
BL = subfunction
00h determine whether using keyboard mouse
Return: BL = 00h using real mouse
01h using keyboard mouse
01h turn keyboard mouse on
02h turn keyboard mouse off
---------------------------------------------
INT 15 - TopView commands
AH = 11h
AL = various
Note: in DESQview 2.x, these function calls are identical to AH=DEh, so
see those below
---------------------------------------------
INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
AH = 11h
STACK: DWORD pointer to ASCIZ string containing and VMiX shell
request (max len = 127)
Return: AX = status
---------------------------------------------
INT 15 - DESQview 2.2 - "ASSERTMAP" - GET/SET MAPPING CONTEXT
AX = 1117h
BX = 0000h get current mapping context without setting
nonzero set new mapping context
Return: BX = mapping context in effect before call
Notes: this function differs from AX = DE17h
mapping contexts determine conventional-memory addressability; setting
a mapping context ensures that the associated program and data areas
are in memory for access. Usable by drivers, TSRs and shared programs.
Caller need not be running under DESQview
---------------------------------------------
INT 15 - DESQview - XDV.COM - INSTALLATION CHECK
AX = 11DEh
Return: CF clear if installed
AX = segment at which XDV is located
---------------------------------------------
INT 15 - VMiX - PUT PROCESS TO SLEEP
AH = 12h
STACK: WORD process ID
Return: AX = status
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
AH = 12h
BH = 00h
BL = which handle to return
00h handle in DWORD on top of stack
01h current task's window handle
02h given task's mailbox handle (task's handle on stack)
03h current task's mailbox handle
04h given task's keyboard handle (task's handle on stack)
05h current task's keyboard object handle
06h given task's OBJECTQ handle (task's handle on stack)
07h current task's OBJECTQ handle
08h \
thru > return 0000:0000
10h /
Return: DWORD on top of stack is object handle
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
AH = 12h
BH = 01h
BL = object
00h (DV 2.0x only) handle is DWORD on top of stack
01h (DV 2.0x only) use task's window handle
02h (DV 2.0x only) given task's mailbox (task's handle on stack)
03h (DV 2.0x only) current task's mailbox
04h (DV 2.0x only) given task's keyboard (task's handle on stack)
05h (DV 2.0x only) current task's keyboard object
08h WINDOW class
09h MAILBOX class
0Ah KEYBOARD class
0Bh TIMER object (counts down 32-bit time in 10ms increments)
0Fh POINTER object
10h PANEL object
STACK: (if window object or WINDOW class)
DWORD address to jump to (no new task if high word == 0)
DWORD (reserved) 0 = non-task window, FFFFh = task window
DWORD bytes for task's private stack (FFFFh == default of 0100h)
DWORD bytes system memory allocation (0 == none, -1 == default)
DWORD window size, columns
DWORD window size, rows
DWORD length of window title
DWORD address of window title
Return: DWORD on top of stack is new object handle
Note: if a new task is created, it is started with
AX = BX = CX = SI = DI = BP = 0
DX = segment of parent's object handle
DS = ES = SS = segment of private stack (and new task's object handle)
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
AH = 12h
BH = 02h
BL = object
00h handle in DWORD on top of stack
window: close window and free
timer: free timer
panel: free panel object
pointer: free pointer
01h task's window handle - kills task, never returns
02h given task's mailbox (task's handle on top of stack)
03h current task's mailbox
04h given task's keyboard (task's handle on top of stack)
05h current task's keyboard object
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
AH = 12h
BX = 0300h
STACK: DWORD handle of panel object
Return: STACK: DWORD length of directory
DWORD address of directory
Format of panel file:
Offset Size Descriptoin
00h 2 BYTEs C0h C3h
02h BYTE number of panels in file
03h for each panel in file:
8 BYTEs blank-padded panel name
DWORD panel offset in file
WORD panel length
data for panels (each consists of one or more window/query/manager
streams)
first byte of each panel must be 1Bh, fifth byte must be E5h
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "ADDR" - GET OBJECT HANDLE
AH = 12h
BH = 03h
BL = object
00h handle in DWORD on top of stack
02h sender of last msg read from mailbox (task's handle on stack)
03h sender of last msg read from current task's mailbox
Return: DWORD on stack is handle
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
AH = 12h
BX = 0400h
STACK: DWORD timer's handle
Return: STACK: DWORD time in 1/100 sec since midnight when timer expires
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD
AH = 12h
BH = 04h
BL = object
00h handle is DWORD on top of stack
window: read next logical line
mailbox: wait for and get next message
pointer: wait for and get next message
01h read the next logical line from task's default window
02h get next message from mailbox (task's handle on top of stack)
03h get next message from current task's mailbox
04h get the next input from keyboard (handle on top of stack)
05h get the next input from task's default keyboard
06h wait for input from any object in OBJECTQ (handle on stack)
07h wait for input from any object in task's default OBJECTQ
Return: STACK: (if objectq) DWORD handle of object with input
(otherwise) DWORD number of bytes
DWORD address
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
AH = 12h
BX = 0400h
STACK: DWORD handle of panel object
DWORD window's handle or 0
DWORD length of panel name
DWORD pointer to panel name
Return: STACK: DWORD handle of created keyboard or 0
DWORD handle of window which was used
Notes: status of APPLY may be checked with STATUS message
panel MUST have the following format
first byte must be 1Bh (i.e. must start with a stream)
first opcode in stream must be E5h
single byte arg of opcode is interpreted thus:
bit 7 \ 11 means new window created
bit 6 / 01 means existing window used
bit 5 if set, create a new keyboard and put in field mode
bit 4 if set and bit 5 set, make new keyboard active
--------------------------------------------
INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
AH = 12h
BH = 05h
BL = object
00h handle is DWORD on top of stack
timer: start timer to end at a specified time
pointer: move pointer icon to specified position
02h send message by value/status=0 to mbox (task's handle on stack)
03h send message by value/status=0 to current task's mailbox
04h add input buffer to KEYBOARD queue (handle on top of stack)
05h add input buffer to task's default KEYBOARD queue
06h add an object to OBJECTQ (handle on top of stack)
07h add an object to task's default OBJECTQ
STACK: (if mailbox) DWORD length
DWORD address
(if keyboard) DWORD status (such as scan code)
DWORD length
DWORD address
(if objectq) DWORD handle of object to add
(if timer) DWORD 1/100ths seconds since midnight (actually
only accurate to 1/18 sec)
(if pointer) DWORD column relative to origin of window
DWORD row relative to origin of window
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
AH = 12h
BH = 05h
BL = object
00h DWORD on top of stack is window handle
01h write string to task's default window
STACK: DWORD object handle if handle passed on stack
DWORD total length of string (high word == 0)
DWORD address of string to display
Note: service routine will pop stack
Return: indicated actions performed
a. non-control characters are displayed
b. CR/LF/BS/Tab cause the usual cursor movement
c. ESC starts a data structure with additional commands
Data Structure:
MAGIC DB 1Bh
MODE DB ? ; 00h, 01h, 10h, 14h-1Fh legal
LENGTH DW ? ; length of remainder in bytes
var-length fields follow, each an OPCODE followed by
zero or more args
MODE 00h (set or display values) "WINDOW STREAM"
Opcodes:args
00h display 20h blanks with the default attribute
01h-1Fh display OPCODE blanks with the default attribute
20h display char with default attribute 20h times
BYTE char to repeat
21h-3Fh display char with default attribute OPCODE-20h times
BYTE char to repeat
40h display 20h blanks with specified attribute
BYTE attribute of blanks
41h-5Fh display OPCODE-40h blanks with specified attribute
BYTE attribute of blanks
60h display next 20h characters
20h BYTES characters to display
61h-7Fh display next OPCODE-60h characters
N BYTES characters to display
80h-87h display N blanks with default attribute
BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
[000h means 800h]
88h-8Fh display N copies of the character
BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
[000h means 800h]
BYTE character to repeat
90h-97h display N blanks with specified attribute
BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
[000h means 800h]
BYTE attribute
98h-9FH display string at logical cursor pos
BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
[000h means 800h]
N BYTES string to display
A0h set logical cursor row
BYTE row number (0 is top)
A1h set logical cursor column
BYTE column number (0 is leftmost)
A2h set top edge of scrolling region
BYTE row
A3h set left edge of scrolling region
BYTE column
A4h set row of physical window position
BYTE line
A5h set column of physical window position
BYTE column
A6h set height of physical window
BYTE #rows
A7h set width of physical window
BYTE #columns
A8h set viewport row
BYTE row
A9h set viewport column
BYTE column
AAh set virtual screen height
BYTE rows
ABh set virtual screen width
BYTE columns
ACh-AEh unused
AFh set compatible/preferred video modes
BYTE compatibility/preference mask
bit 7 compatible with monochrome
bit 6 compatible with color text, EGA/VGA graphics
bit 5 compatible with medium-resolution CGA graphics
bit 4 compatible with high-resolution CGA graphics
bit 3 prefer monochrome
bit 2 prefer color text, EGA/VGA graphics
bit 1 prefer medium-resolution CGA graphics
bit 0 prefer high-resolution CGA graphics
B0h move logical cursor down
BYTE #rows (signed, negative values move up)
B1h move logical cursor right
BYTE #cols (signed, negative values move left)
B2h shift top edge of scrolling region
BYTE #rows (signed)
B3h shift left edge of scrolling region
BYTE #cols (signed)
B4h shift window down
BYTE #lines (signed)
B5h shift window right
BYTE #columns (signed)
B6h expand physical window vertically
BYTE #lines (signed)
B7h expand physical window horizontally
BYTE #columns (signed)
B8h adjust viewport row
BYTE #rows (signed)
B9h adjust viewport column
BYTE #columns (signed)
BAh adjust virtual screen height
BYTE #rows to increase (signed)
BBh adjust virtual screen width
BYTE #cols to increase (signed)
BCh-BFh unused
C0h set logical cursor position
BYTE row number (0 is top border)
BYTE column number (0 is left border)
C1h set top left corner of scrolling region
BYTE row
BYTE column
C2h set window pos
BYTE upper left row (no top border if 0)
BYTE upper left column (no left border if 0)
C3h set current window size
BYTE #rows
BYTE #cols
C4h set upper left corner of viewport (portion of virtual screen
displayed in window)
BYTE row
BYTE column
C5h set size of virtual screen
BYTE #rows
BYTE #cols
C6h unused
C7h unused
C8h set logical cursor relative to current position
BYTE number of rows to move down (signed)
BYTE number of columns to move right (signed)
C9h shift top left corner of scrolling region
BYTE #rows (signed)
BYTE #cols (signed)
CAh set window pos relative to current position
BYTE number of rows to shift down (signed)
BYTE number of columns to shift right (signed)
CBh set window size relative to current size
BYTE number of rows to expand (signed)
BYTE number of cols to expand (signed)
CCh shift viewport relative to current position
BYTE rows to shift (signed)
BYTE cols to shift (signed)
CDh resize virtual screen
BYTE #rows to expand (signed)
BYTE #cols to expand (signed)
CEh scroll text when using E8h-EBh/F8h-FBh opcodes (default)
CFh scroll attributes when using E8h-EBh/F8h-FBh opcodes
D0h allow window frame to extend beyond screen
D1h always display a complete frame, even if window extends beyond
edge of screen
D2h allow DV to change colors on video mode switch (default)
D3h application changes colors
D4h window is visible
D5h window is hidden
D6h window has frame
D7h window unframed
D8h read characters from window (default)
D9h read attributes from window
DAh use logical attributes, which may be remapped
attributes
1 normal text
2 highlighted normal text
3 help text
4 highlighted help text
5 error message
6 highlighted error message
7 emphasized text
8 marked text
9-16 are reverse video versions of 1-8
DBh use physical attributes for characters
DCh enable special actions for control characters (default)
DDh disable special control char handling, all chars displayable by
BIOS TTY call
DEh write both character and attribute (default)
DFh write character only, leave attribute untouched
E0h repeat following commands
BYTE number of times
E1h end of commands to repeat, start repeating them
E2h set color
BYTE color
E3h clear virtual screen
E4h redraw window
E5h select menu style
BYTE style
bits 5,4 = 01 use two-letter menu entries for remainder of
this stream
E5h (panel file only)
BYTE modifier
bits 7,6 = 11 panel goes in new window
= 01 panel uses existing window
bit 5 = 1 create new keyboard in field mode
bit 4 = 1 make newly-created keyboard active
bit 3 reserved
bit 2 = 1 stream defined exclusive input window (DV 2.2)
bit 1 reserved
bit 0 reserved
E6h create new window and perform rest of manipulations in new window
BYTE number of rows
BYTE number of columns
Return: DWORD object handle returned on stack at end
E7h unused
E8h scroll area up (top left corner defined by opcode C1h)
BYTE height
BYTE width
E9h scroll area down (top left corner defined by opcode C1h)
BYTE height
BYTE width
EAh scroll area left (top left corner defined by opcode C1h)
BYTE height
BYTE width
EBh scroll area right (top left corner defined by opcode C1h)
BYTE height
BYTE width
ECh set logical attributes for window contents
BYTE video modes command applies to
bit 7 monochrome
bit 6 color text, EGA/VGA graphics
bit 5 medium-resolution CGA graphics
bit 4 high-resolution CGA graphics
BYTE which attributes to set
bit 7 if set, copy single following byte to indicated attrs
bits 4-6 # of first attribute to change - 1
bits 0-3 # of consecutive attributes to change
N BYTEs new attributes
EDh set logical attributes for window frame
BYTE video modes command applies to (see opcode ECh)
BYTE which attributes to set
bit 7 if set, copy single following byte to indicated attrs
bits 4-6 # of first attribute to change - 1
bits 0-3 # of consecutive attributes to change
N BYTEs new attributes
attributes
1 = top left corner
2 = top right corner
3 = bottom left corner
4 = bottom right corner
5 = top edge
6 = bottom edge
7 = left edge
8 = right edge
EEh set characters for window frame
BYTE video modes command applies to (see opcode ECh)
BYTE which characters to set
bit 7 if set, copy single following byte to indicated chars
bits 4-6 # of first char to change - 1
bits 0-3 # of consecutive chars to change
N BYTEs new chars (same relative position as attributes above)
EFh set window name
BYTE length of name
N BYTEs name
F0h clear input field to blanks
BYTE field number
F1h fill input field with character
BYTE field number
BYTE char
F2h set color of input field
BYTE field number (1-N)
BYTE attribute
F3h set initial contents of input field
BYTE field number (1-N)
N BYTEs enough chars to exactly fill field as defined by op FFh
F4h position cursor to specific input field
BYTE field number (1-N)
F5h change field table entry
BYTE field number
7-8 BYTEs field table entry (see opcode FFh below)
F6h set field type
BYTE field number
BYTE type
F7h "multiple fill" write data to fields with program output bit set
in field table entry, in field number order
N BYTEs (total length of all program output fields)
F8h scroll field up a line
BYTE field number
F9h scroll field down a line
BYTE field number
FAh scroll field left
BYTE field number
FBh scroll field right
BYTE field number
FCh set field table header
BYTE number of fields
BYTE screen behavior bits
bit 7 reserved
bit 6 set if menu items may be selected via keyboard
bit 5 set if left mouse button may terminate entry
bit 4 set if right mouse button may terminate entry
bit 3 if set, menu fields return ' ' rather than 'Y' or 'N'
bit 2 if set, modified bits reset on return to application
bits 0,1 = 00 no data returned on read of keyboard
01 data returned as array of chars containing
all fields packed together, with menu fields
represented by the character 'Y' if selected
and 'N' if not selected
10 data returned as variable-length records for
all fields
11 data returned as variable-length records for
the fields which were modified
BYTE field in which cursor was when entry was terminated
(updated by DESQview)
BYTE field in which mouse was when entry was terminated
(updated by DESQview)
BYTE color of field currently pointed to during entry
BYTE color of input fields which have been selected
FDh reset modified bit for all fields
FEh reset selected and modified bits for all fields
FFh set up input fields
6 BYTEs table header (see opcode FCh above)
the field table entries, one for each field
BYTE start row \
BYTE start column \ if menu selection and start is to
BYTE end row / right or below end, select from kbd only
BYTE end column /
BYTE field type
bits 7,6 = 00 non-entry field
01 echos keystrokes input to make menu selection
10 fill-in field
11 menu selection
bit 5 program output--field can be filled by F7h opcode
bit 4 reserved
bit 3 reserved
bit 2 reserved
bit 1 set if field selected
bit 0 set if field modified
BYTE modifier
if type is fill-in, then bit flags to determine behavior
bit 7 if set, beep when field is full
bit 6 move to next field when current field is full
bit 5 if set, enter text from right end (for numbers)
bit 4 if set, force input to uppercase
bit 3 if set, clear old contents on first keystroke
bit 2 if set, input returned when cursor moves out
of modified field (API level 2.02+)
bit 1 reserved
bit 0 reserved
if type is menu selection, first key to press to activate
00h if have to point-&-click or is an extended-ASCII
keystroke (only if two-key menus enabled)
BYTE for menu item, color of field after cursor or mouse
passes through it
BYTE second key for activating menu selection if field type is
C0h (0 = only single key). This byte is present iff
two-letter menu entries selected with opcode E5h, and
in that case is present regardless of field type
Note: DESQview uses and updates the actual copy of the information
which is contained in the stream. Thus this info must remain
intact until after the data entry is complete.
MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
A0h return logical cursor row in next byte
A1h return logical cursor column in next byte
A2h return top row of scrolling region in next byte
A3h return left column of scrolling region in next byte
A4h return row of physical window origin in next byte
A5h return column of physical window origin in next byte
A6h return height of physcial window in next byte
A7h return width of physical window in next byte
A8h return row of viewport origin in next byte
A9h return column of viewport origin in next byte
AAh return height of virtual screen in next byte
ABh return width of virtual screen in next byte
AFh return current video mode in next byte
C0h return current logical cursor position in next two bytes
C1h return top left corner of scrolling region in next two bytes
C2h return current window position in next two bytes
C3h return current window size in next two bytes
C4h return current viewport origin in next two bytes
C5h return current virtual screen size in next two bytes
D0h \ overwritten with D0h if frames may fall off screen edge
D1h / D1h if frames always displayed entirely
D2h \ overwritten with D2h if DESQview controls color palette
D3h / D3h if application changes color palette
D4h \ overwritten with D4h if window visible
D5h / D5h if window hidden
D6h \ overwritten with D6h if window has frame
D7h / D7h if window unframed
D8h \ overwritten with D8h if reading characters from window
D9h / D9h if reading attributes from window
DAh \ overwritten with DAh if using logical attributes
DBh / DBh if using physical attributes
DCh \ overwritten with DCh if TTY control char interpretation on
DDh / DDh if TTY control char interpretation off
DEh \ overwritten with DEh if writing both characters and attributes
DFh / DFh if leaving attributes untouched
E2h return current color in next byte
ECh get logical attributes for window contents
BYTE execute call if currently in specified video mode
bit 7 monochrome
bit 6 color text, EGA/VGA graphics
bit 5 medium-resolution CGA graphics
bit 4 high-resolution CGA graphics
BYTE which attributes to get
bit 7 unused???
bits 4-6 first attribute to get - 1
bits 0-3 # consecutive attributes
N BYTEs buffer to hold attributes
EDh get logical attributes for window frame
BYTE execute call if currently in video mode (see opcode ECh)
BYTE which attributes to get
bit 7 unused???
bits 4-6 first attribute to get - 1
bits 0-3 # consecutive attributes
N BYTEs buffer to hold attributes
EEh get characters for window frame
BYTE execute call if currently in video mode (see opcode ECh)
BYTE which attributes to get
bit 7 unused???
bits 4-6 first char to get - 1
bits 0-3 # consecutive chars
N BYTEs buffer to hold chars
EFh return current window name
BYTE max length of returned name
N BYTEs buffer to hold window name
F3h return contents of input field
BYTE field number
N BYTEs buffer to hold field contents (size exactly equal to field
size)
F5h get field table entry
BYTE field number
7-8 BYTEs buffer to hold field table entry
F6h get type of a field
BYTE field number
BYTE type
FCh get field table header
6 BYTEs buffer to store header
MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
00h allow window to be moved horizontally
01h allow window to be moved vertically
02h allow window to change width
03h allow window to change height
04h allow window to be scrolled horizontally
05h allow window to be scrolled vertically
06h allow "Close Window" menu selection
07h allow window to be hidden
08h allow "Mark" menu
0Eh allow "Scissors" menu
10h allow DESQview main menu to be popped up
11h allow "Switch Windows" menu
12h allow "Open Window" menu
13h allow "Quit" menu selection
20h-33h opposite of 00h-13h, disallow specified action
40h notify if horizontal position of window changes
41h notify if vertical position of window changes
42h notify if width of window changes
43h notify if height of window changes
44h notify if window scrolled horizontally
45h notify if window scrolled vertically
46h notify if window is closed--program has to clean up and exit itself
47h notify if window is hidden
48h notify if "?" on main menu selected
49h notify if pointer message sent to window
4Ah notify if window is made active
4Bh notify if window is switched away from
4Ch notify if video mode changes
4Dh notify if "Scissors" menu "Cut" option selected
4Eh notify if "Scissors" menu "Copy" option selected
4Fh notify if "Scissors" menu "Paste" option selected
50h notify if DESQview main menu popped up
51h notify if DESQview main menu popped down
60h-71h opposite of 40h-51h: don't notify on specified event
84h attach window to parent task's window (both move together)
85h detach window from parent task's window (may move independently)
86h disable background operation
87h enable running in background
88h set minimum size of physical window
BYTE rows
BYTE columns
89h set maximum size of physical window
BYTE rows
BYTE cols
8Ah set primary asynchronous notification routine
DWORD address of routine, 0000h:0000h means none
on entry ES:DI = handle of window, DS:SI is 32-bit value set
by 8Bh opcode
mailbox contains message indicating event
Opcode
40h horizontal movement
DWORD object handle of window
BYTE new row
BYTE new col
41h vertical movement
DWORD object handle of window
BYTE new row
BYTE new col
42h horizontal size change
DWORD object handle of window
BYTE new rows
BYTE new cols
43h vertical size change
DWORD object handle of window
BYTE new rows
BYTE new cols
44h scrolled horizontally
DWORD object handle of window
BYTE mouse row within window
BYTE mouse column within window
BYTE field mouse is on, 0 if none
BYTE amount moved: >0 right, <0 left, 0 done
45h scrolled vertically
DWORD object hande of window
BYTE mouse row within window
BYTE mouse column within window
BYTE field mouse is on, 0 if none
BYTE amount moved: >0 down, <0 up, 0 done
46h window closed
DWORD object handle of window
BYTE mouse pointer row
BYTE mouse pointer column
BYTE field mouse is on, 0 if none
47h window hidden
48h Help for Program selected
DWORD object handle of window
BYTE mouse pointer row
BYTE mouse pointer column
BYTE field mouse is on, 0 if none
49h pointer message sent to window
4Ah switched to window from another ("raise")
4Bh switched away from the window ("lower")
4Ch video mode changed
BYTE new video mode
4Dh Scissors/cUt selected
DWORD object handle of window
BYTE row of upper left corner
BYTE column of upper left corner
BYTE field number ul corner is in, 0=none
DWORD handle of orphaned window created to
hold data
BYTE height of region
BYTE width of region
4Eh Scissors/Copy selected
DWORD object handle of window
BYTE row of upper left corner
BYTE column of upper left corner
BYTE field number ul corner is in, 0=none
DWORD handle of orphaned window created to
hold data
BYTE height of region
BYTE width of region
4Fh Scissors/Paste selected
DWORD object handle of window
BYTE row of upper left corner
BYTE column of upper left corner
BYTE field number ul corner is in, 0=none
DWORD handle of orphaned window with data
BYTE height of region
BYTE width of region
50h main menu popped up
51h main menu popped down
routine should restore all registers before returning
8Bh set async notification parameter
DWORD 32-bit value passed to async routine in DS:SI
ACh (DV2.2) perform regular select field attribute processing
ADh (DV2.2) protect attributes in selected field from being lost
AEh make window default notify window for owning app (API level 2.00+)
AFh set selected field marker character
BYTE character to display at left edge of selected fields
BCh set standard field processing mode
BDh set alternate field processing mode (enables cursor pad for menus)
BEh enables changing reverse logical attributes with ECh opcode
BFh disables changing reverse logical attributes with ECh opcode
C0h make current window topmost in system
C1h force current process into foreground
C2h make current window topmost in process
C3h position mouse pointer relative to origin of current field
BYTE rows below upper left corner of field
BYTE columns to right of upper left corner of field
C4h position mouse pointer relative to origin of given field
BYTE field number
BYTE rows below upper left corner of field
BYTE columns to right of upper left corner of field
C5h hide current window
C6h show windows for this process
C7h hide all windows for this process
C8h suspend process and hide all its windows
C9h force current process into background
CAh make current window bottom-most in process
CBh cancel current window manager operation, remove DV menu, give
control to topmost application
CCh close window
CEh reorder windows
DWORD pointer to null-terminated list of words
each word is segment of object handle for a window
MODES 14h to 1Fh "USER STREAMS"
normally NOPs, but may be defined by SETESC message to invoke FAR
routines, one for each mode number
on entry to handler,
DS:SI = first byte of actual stream (not header)
CX = #bytes in stream
ES:DI = window's handle
---------------------------------------------
INT 15 - DESQview 2.2 - SEND MESSAGE - SET PRIORITY
AH = 12h
BH = 06h
BL = object
00h object handle in DWORD on top of stack
STACK: DWORD new priority of object in task's OBJECTQ
---------------------------------------------
INT 15 - DESQview 2.2 - SEND MESSAGE - GET PRIORITY
AH = 12h
BH = 07h
BL = object
00h object handle in DWORD on top of stack
Return: STACK: DWORD object priority
Note: initially all objects have the same default value. Should make
relative adjustments to this default value.
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
AH = 12h
BH = 08h
BL = object
00h handle in DWORD on top of stack
timer: elapsed time since timer started
pointer: number of messages queued to pointer object
panel: number of panels in panel file
01h total chars in current task's default window
02h number of messages in task's mailbox (task's handle on stack)
03h number of messages in current task's mailbox
04h number of input buffers queued in task's kbd (handle on stack)
05h number of input buffers queued for current task's default kbd
06h number of objects queued in OBJECTQ (task's handle on stack)
07h number of objects queued in current task's OBJECTQ
Return: DWORD on stack is result
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
AH = 12h
BH = 09h
BL = object
00h handle in DWORD on top of stack
window: chars/line
timer: timer remaining before timer expires
01h number of chars/line in current task's default window
Return: DWORD on top of stack is length
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
AH = 12h
BH = 0Ah
BL = object
00h handle is DWORD on top of stack
window: write characters and attributes
timer: start timer for specified interval
pointer: set control flags
01h write characters and attributes to task's default window
02h send message/status by value to mailbox (task's handle on stack)
03h send message/status by value to current task's default mailbox
04h set control flags on KEYBOARD object (handle on top of stack)
05h set control flags on task's default KEYBOARD object
STACK: (if mailbox) DWORD status
DWORD length of message
DWORD address
(if timer) DWORD duration in 1/100 seconds
(if window) DWORD count of characters
DWORD address of characters
DWORD count of attributes
DWORD address of attributes
(otherwise) DWORD bits to set
For keyboard objects, the bits have the following significance:
bit 15 reserved, can't be set
bit 14 unused
bit 13 reserved, can't be set
bit 12-5 unused
bit 4 filter all keys (used with handler established by SETESC)
bit 3 program continues executing while input in progress
bit 2 insert mode active
bit 1 keyboard is active
bit 0 keyboard is in field mode
For pointer objects, the bits have the following significance:
bit 15 reserved, can't be set
bit 14-8 unused
bit 7 mouse pointer is hidden while in window
bit 6 get messages even if window not topmost
bit 5 get messages even if window not foreground
bit 4 mouse button must be held 1/2 second before it "clicks"
bit 3 pointer position is relative to screen origin, not window origin
bit 2 send message on button release as well as button press
bit 1 unused???
bit 0 send message only on button activity, not movement
DV-specific, and INT 15h/AX=DE0Fh must have been called first
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
AH = 12h
BH = 0Bh
BL = object
00h handle is DWORD on top of stack
window: write attributes only
mailbox: send message by reference
pointer: reset control flags
01h write attributes only to task's default window
02h send msg/status by reference to mailbox (task's handle on stack)
03h send msg/status by reference to current task's mailbox
04h clear control flags on KEYBOARD object (handle on top of stack)
05h clear control flags on task's default KEYBOARD object
06h remove specific object from OBJECTQ (task's handle on stack)
07h remove specific object from task's default OBJECTQ
STACK: (if mailbox) DWORD status
DWORD length
DWORD address
(if window) DWORD number of attributes to write
DWORD address of attributes
(if objectq) DWORD handle of object to remove
(otherwise) DWORD indicates which bits to clear
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
AH = 12h
BH = 0Ch
BL = object
00h handle is DWORD on top of stack
window: fill with given character
keyboard: attach to a window
timer: open
pointer: start taking input for window
panel: associate with a panel file
01h fill task's default window with given character
02h open given task's mailbox for input (task's handle on stack)
03h open current task's mailbox
04h attach a KEYBOARD to a window (handle on top of stack)
05h attach task's default KEYBOARD to a window
06h open a task's OBJECTQ (task's handle on top of stack)
07h open current task's OBJECTQ
STACK: (if window) DWORD character to fill with
(if keyboard) DWORD handle of window to attach to
(if pointer) DWORD handle of window to attach to
(if panel) DWORD length of filename
DWORD address of filename
(otherwise) nothing
Notes: special action taken if first byte of panel file name is 1Bh
if first two bytes of panel file "name" are C0hC3h, then the "name" IS
the panel file
result code of open may be retrieved with STATUS message
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
AH = 12h
BH = 0Dh
BL = object
00h handle is DWORD on top of stack
timer: close
keyboard: detach from window
pointer: stop taking input
panel: close
02h close given task's mailbox (task's handle on top of stack)
03h close task's default mailbox
04h close KEYBOARD object (handle on top of stack)
05h close task's default KEYBOARD
06h close givent task's OBJECTQ (task's handle on top of stack)
07h close current task's OBJECTQ
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
AH = 12h
BH = 0Eh
BL = object
00h handle is DWORD on top of stack
window: clear
keyboard: discard input
timer: cancel current interval
pointer: discard all pending messages
01h clear task's default window
02h discard all queued messages in mailbox (handle on top of stack)
03h discard all queued messages in current task's default mailbox
04h discard all input queued to KEYBOARD (handle on top of stack)
05h discard all input queued to task's default KEYBOARD
06h remove all objects from OBJECTQ (task's handle on top of stack)
07h remove all objects from current task's OBJECTQ
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
AH = 12h
BH = 0Fh
BL = object
00h handle is DWORD on top of stack
timer: is it running?
pointer: return status of last message
panel: verify success of last OPEN or APPLY
02h return status of last msg READ from mailbox (handle on stack)
03h return status of last msg READ from task's default mailbox
04h get status of last msg from task's KEYBOARD (task handle on stk)
05h get status of last msg from task's default KEYBOARD
06h return whether OBJECTQ is open or not (handle on top of stack)
07h return whether task's default OBJECTQ is open or not
Return: DWORD on top of stack is status
Note: if object is a panel object, the status indicates the error code:
14h panel name not in panel directory
15h not enough memory to apply panel
16h invalid panel format
17h panel file already open
81h-92h DOS error codes+80h
95h not enough memory to open panel file
98h null panel file name
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
AH = 12h
BH = 10h
BL = object
00h handle is DWORD on top of stack
01h returns TRUE if logical cursor past end of task's def window
02h return ??? for task's mailbox (task's handle on top of stack)
03h return ??? for current task's mailbox
Return: DWORD on top of stack is status
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
AH = 12h
BH = 11h
BL = object
00h window's handle is DWORD on top of stack
01h position logical cursor on task's default window
STACK: DWORD column
DWORD row
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
AH = 12h
BH = 11h
BL = mailbox to name
00h DWORD on top of stack is mailbox handle
02h use given task's mailbox (task's handle on top of stack)
03h use current task's default mailbox
STACK: DWORD length of name
DWORD address of name
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
AH = 12h
BX = 1100h
STACK: DWORD object handle for pointer object
DWORD number of colums to scale pointer position to
DWORD number of rows to scale pointer position to
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
AH = 12h
BH = 12h
BL = object
00h handle is DWORD on top of stack
01h read next N chars/attributes on task's default window
STACK: DWORD count
Return: STACK: DWORD width of screen line
DWORD address
DWORD count actually read
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
AH = 12h
BX = 1200h
STACK: DWORD object handle for pointer
Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
DWORD pointer pos scaled as if window were this many rows high
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
AH = 12h
BH = 13h
BL = window object
00h DWORD on top of stack is handle for window to redraw
01h redraw task's default window
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
AH = 12h
BX = 1300h
STACK: DWORD object handle for pointer
DWORD character to use for pointer
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
AH = 12h
BH = 14h
BL = message modifier
00h handle is DWORD on top of stack
01h define user stream
04h intercept keystrokes from KEYBOARD to a window (handle on stack)
05h intercept keystrokes from task's default KEYBOARD to a window
STACK: (if window) DWORD user stream number (14h-1Fh)
DWORD address of FAR user stream handler
(if keyboard) DWORD address of FAR filter function
The keyboard filter function is called when the keyboard is in field mode. On
entry,
AL = character
AH = 00h or extended ASCII code if AL = 00h
BL = field number
CH = cursor column
CL = cursor row
DL = field type modifier (sixth item in field table entry)
DH = ??? (seventh item in field table entry)
ES:SI = window's handle
(also, in DV 2.00, DS:DI points to the field table entry. This may change in
other versions)
The filter function should return
AH = 00h use keystroke
01h ignore keystroke
>1 beep and ignore keystroke
---------------------------------------------
INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
AH = 12h
BH = 14h
BL = object
00h mailbox handle is DWORD on top of stack
02h use given task's mailbox (task's handle on top of stack)
03h use current task's default mailbox
Note: release exclusive access by sending CLOSE message to mailbox
access may be requested multiple times, and requires multiple CLOSEs
---------------------------------------------
INT 15 - DESQview 2.2 - SEND MESSAGE - SET FLAGS
AH = 12h
BH = 15h
BL = object
00h DWORD on top of stack
mailbox, keyboard, or pointer only
02h mailbox for task whose handle is on top of stack
03h mailbox for current task
04h keyboard for task whose handle is on top of stack
05h keyboard for current task
STACK: DWORD flags
if mailbox:
bit 0: all mail messages in common memory
bit 1: allow write even if closed
bit 2: don't erase messages when mailbox closed
if keyboard:
bit 5: exclusive input when keyboard in use for input
Return: nothing
Note: this call is only available if the API level has been set to at least 2.2
---------------------------------------------
INT 15 - DESQview 2.2 - SEND MESSAGE - GET FLAGS
AH = 12h
BH = 16h
BL = object
00h DWORD on top of stack
mailbox, keyboard, or pointer only
02h mailbox for task whose handle is on top of stack
03h mailbox for current task
04h keyboard for task whose handle is on top of stack
05h keyboard for current task
Return: STACK: DWORD current control flags
Note: this call is only available if the API level has been set to at least 2.2
---------------------------------------------
INT 15 - VMiX - WAKE PROCESS
AH = 13h
STACK: WORD process ID
Return: AX = status
---------------------------------------------
INT 15 - VMiX - CLEAR WINDOW
AH = 14h
STACK: WORD top left corner of window
WORD bottom right corner of window
Return: AX = status
---------------------------------------------
INT 15 - VMiX - SET BANNER WINDOW MESSAGE
AH = 15h
STACK: DWORD pointer to ASCIZ banner message
Return: AX = status
---------------------------------------------
INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR
AH = 16h
STACK: DWORD pointer to I/O Request Packet
WORD top left corner of window
WORD bottom right corner of window
Return: AX = status
---------------------------------------------
INT 15 - VMiX - GET CONSOLE WINDOW COLORS
AH = 17h
Return: AH = foreground color
AL = background color
---------------------------------------------
INT 15 - VMiX - SET CONSOLE COLORS
AH = 18h
STACK: WORD new background/foreground colors
Return: AX = color
---------------------------------------------
INT 15 - VMiX v2+ - ???
AH = 19h
STACK: WORD ???
Return: ???
---------------------------------------------
INT 15 - VMiX v2+ - ???
AH = 1Ah
STACK: 3 WORDs ???
Return: ???
---------------------------------------------
INT 15 - VMiX v2+ - ???
AH = 1Bh
STACK: 5 WORDs ???
Return: ???
---------------------------------------------
INT 15 - VMiX v2+ - ???
AH = 1Ch
STACK: 5 WORDs ???
Return: ???
---------------------------------------------
INT 15 - VMiX v2+ - ???
AH = 1Dh
???
Return: ???
---------------------------------------------
INT 15 - VMiX v2+ - ???
AH = 1Eh
STACK: WORD ???
Return: ???
---------------------------------------------
INT 15 - DOS 3.10 PRINT.COM - DISABLE CRITICAL REGION FLAG (AT,XT286,PS50+)
AX = 2000h
---------------------------------------------
INT 15 - DOS 3.10 PRINT.COM - SET CRITICAL REGION FLAG (AT,XT286,PS50+)
AX = 2001h
ES:BX -> byte which is to be incremented while in a DOS call
---------------------------------------------
INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
AX = 2010h
???
Return: ???
---------------------------------------------
INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
AX = 2011h
???
Return: ???
---------------------------------------------
INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
AH = 21h
AL = subfunction
00h read POST log
01h write POST log
BH = device ID
BL = error code
Return: CF set on error
AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
if function 00h:
BX = number of error codes stored
ES:DI -> error log
Note: the log is a series of words, the first byte of which identifies the
error code and the second the device.
---------------------------------------------
INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
AH = 40h
AL = subfunction
00h get system profile in CX and BX
01h set system profile from CX and BX
02h get internal modem profile in BX
03h set internal modem profile from BX
---------------------------------------------
INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
AH = 41h
AL = condition type
bits 0-2: condition to wait for
0 any external event
1 compare and return if equal
2 compare and return if not equal
3 test and return if not zero
4 test and return if zero
bit 3: reserved
bit 4: 1=port address, 0=user byte
bits 5-7: reserved
BH = condition compare or mask value
BL = timeout value times 55 milliseconds
00h means no timeout
DX = I/O port address if AL bit 4 set
ES:DI -> user byte if AL bit 4 clear
---------------------------------------------
INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE)
AH = 42h
AL = 00h to use system profile
01h to force suspend regardless of system profile
---------------------------------------------
INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
AH = 43h
Return: AL = status bits
bit 0: LCD detached
bit 1: reserved
bit 2: RS232/parallel adapter powered on
bit 3: internal modem powered on
bit 4: power activated by alarm
bit 5: standby power lost
bit 6: external power in use
bit 7: power low
---------------------------------------------
INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
AH = 44h
AL = 00h to power off
01h to power on
---------------------------------------------
INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
AH = 4Fh
AL = scan code
CF set
Return: CF set
AL = scan code
CF clear
scan code should be ignored
Note: Called by INT 9 handler to translate scan codes
---------------------------------------------
INT 15 - OS HOOK - DEVICE OPEN (AT,XT2,XT286,PS)
AH = 80h
BX = device ID
CX = process type
Return: CF set on error
AH = status
---------------------------------------------
INT 15 - OS HOOK - DEVICE CLOSE (AT,XT2,XT286,PS)
AH = 81h
BX = device ID
CX = process type
Return: CF set on error
AH = status
---------------------------------------------
INT 15 - OS HOOK - DEVICE PROGRAM TERMINATE (AT,XT2,XT286,PS)
AH = 82h
BX = device ID
Return: CF set on error
AH = status
Note: closes all devices opened with function 80h
---------------------------------------------
INT 15 - SYSTEM - EVENT WAIT (AT,XT286,CONV,PS)
AH = 83h
AL = subservice
00h = set interval
01h = cancel
ES:BX -> event flag (bit 7 set when interval expires)
CX:DX = number of microseconds to wait (only accurate to 977 us)
Return: CF set if function already busy
---------------------------------------------
INT 15 - SYSTEM - READ JOYSTICK (AT,XT2,XT286,PS)
AH = 84h
DX = subservice
0000h get switch settings
Return: AL = switch settings (bits 7-4)
0001h read joystick inputs
Return: AX = A(x) value
BX = A(y) value
CX = B(x) value
DX = B(y) value
---------------------------------------------
INT 15 - OS HOOK - SYSTEM REQUEST KEY PRESSED (AT,XT2,XT286,CONV,PS)
AH = 85h
AL = 00h press
= 01h release
Return: CF set on error
AH = status
Note: called by keyboard decode routine
---------------------------------------------
INT 15 - SYSTEM - WAIT (AT,XT2,XT286,CONV,PS)
AH = 86h
CX,DX = number of microseconds to wait (only accurate to 977 us)
Return: CF clear: after wait elapses
CF set: immediately due to error
---------------------------------------------
INT 15 - EXTENDED MEMORY - BLOCK MOVE (AT,XT286,PS)
AH = 87h
CX = number of words to move
ES:SI -> global descriptor table (see below)
Return: CF set on error
AH = status
00h source copied into destination
01h parity error
02h interrupt error
03h address line 20 gating failed
Format of global descriptor table:
Offset Size Description
00h 16 BYTEs zeros
10h WORD source segment length in bytes (2*CX-1 or greater)
12h 3 BYTEs 24-bit linear source address, low byte first
15h BYTE source segment access rights (93h)
16h WORD zero
18h WORD destination segment length in bytes (2*CX-1 or greater)
1Ah 3 BYTEs 24-bit linear destination address, low byte first
1Dh BYTE destination segment access rights (93h)
1Eh 18 BYTEs zeros
---------------------------------------------
INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (AT,XT286,PS)
AH = 88h
Return: AX = memory size in K
---------------------------------------------
INT 15 - SYSTEM - SWITCH TO VIRTUAL MODE (AT,XT286,PS50+)
AH = 89h
BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
DS:SI -> GDT for protected mode
offset 0h null descriptor
8h GDT descriptor
10h IDT descriptor
18h DS
20h ES
28h SS
30h CS
38h uninitialized, used to build descriptor for BIOS CS
CX = offset into protected-mode CS to jump to
Return: CF set on error
AH = 0FFh error enabling address line 20
---------------------------------------------
INT 15 - OS HOOK - DEVICE BUSY LOOP (AT,XT2,XT286,CONV,PS)
AH = 90h
AL = type code
00h disk
01h diskette
02h keyboard
03h PS/2 pointing device
80h network
FCh disk reset
FDh diskette motor start
FEh printer
ES:BX -> request block for type codes 80h through BFh
Return: CF set if wait time satisfied
CF clear if driver must perform wait
Note: type codes are allocated as follows:
00-7F non-reentrant devices; OS must arbitrate access
80-BF reentrant devices; ES:BX points to a unique control block
C0-FF wait-only calls, no complementary INT 15/AH=91h call
---------------------------------------------
INT 15 - OS HOOK - SET FLAG AND COMPLETE INTERRUPT (AT,XT2,XT286,CONV,PS)
AH = 91h
AL = type code (see AH=90h)
ES:BX -> request block for type codes 80h through BFh
Return: AH = 00h
---------------------------------------------
INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
AH = C0h
Return: CF set if BIOS doesn't support call
CF clear on success
ES:BX -> ROM table (see below)
Note: the 1/10/86 XT BIOS returns an incorrect value for the feature byte
Format of ROM configuration table:
Offset Size Description
00h WORD number of bytes following
02h BYTE model: PC=FFh, XT=FEh or FBh, PCjr = FDh, PS/2=F8h
03h BYTE submodel: distingushes between AT and XT/286, etc.
04h BYTE BIOS revision: 0 for first release, 1 for 2nd, etc.
05h BYTE features:
bit 7 = DMA channel 3 used by hard disk BIOS
bit 6 = 2nd 8259 installed
bit 5 = Real-Time Clock installed
bit 4 = INT 15h/AH=4Fh called upon INT 9h
bit 3 = wait for external event supported
bit 2 = extended BIOS area allocated at 640K
bit 1 = bus is Micro Channel instead of ISA
bit 0 reserved
06h WORD reserved (0)
08h WORD reserved (0)
---------------------------------------------
INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
AH = C1h
Return: CF set on error
CF clear if successful
ES = segment of data area
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
AX = C200h
BH = 00h disable
01h enable
Return: CF set on error
AH = status
00h successful
01h invalid function
02h invalid input
03h interface error
04h need to resend
05h no device handler installed
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
AX = C201h
Return: CF set on error
AH = status (see AX=C200h)
CF clear if successful
BH = device ID
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
AX = C202h
BH = sampling rate
00h 10/second
01h 20/second
02h 40/second
03h 60/second
04h 80/second
05h 100/second
06h 200/second
Return: CF set on error
AH = status (see AX=C200h)
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
AX = C203h
BH = resolution
00h one count per mm
01h two counts per mm
02h four counts per mm
03h eight counts per mm
Return: CF set on error
AH = status (see AX=C200h)
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
AX = C204h
Return: CF set on error
AH = status (see AX=C200h)
CF clear if successful
BH = device ID
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
AX = C205h
BH = data package size (1 - 8 bytes)
Return: CF set on error
AH = status (see AX=C200h)
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
AX = C206h
BH = subfunction
00h return device status
Return: BL = status
bit 0: right button pressed
bit 1: reserved
bit 2: left button pressed
bit 3: reserved
bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
bit 5: device enabled
bit 6: 0 if stream mode, 1 if remote mode
bit 7: reserved
CL = resolution (see AX=C203h)
DL = sample rate, reports per second
01h set scaling at 1:1
02h set scaling at 2:1
Return: CF set on error
AH = status (see AX=C200h)
---------------------------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
AX = C207h
ES:BX = user device handler
Return: CF set on error
AH = status (see AX=C200h)
--------------------------------------------
INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
AH = C3h
AL = 00h disable
01h enable
BX = timer counter
Return: CF set on error
Note: the watchdog timer generates an NMI
---------------------------------------------
INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
AH = C4h
AL = 00h return base POS register address
01h enable slot
BL = slot number
02h enable adapter
Return: CF set on error
DX = base POS register address (if function 00h)
---------------------------------------------
INT 15 - DESQview - GET PROGRAM NAME
AX = DE00h
Return: AX = offset into DESQVIEW.DVO of current program's record (see below)
Format of program entry in DESQVIEW.DVO:
Offset Size Description
00h BYTE length of name
01h N BYTEs name
2 BYTEs keys to invoke program (second = 00h if only one key used)
WORD ??? seems always to be 0000h
BYTE end flag: 00h for all but last entry, which is FFh
---------------------------------------------
INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
AX = DE01h
Return: nothing
Note: reads DESQVIEW.DVO, disables Open menu if file not in current directory
---------------------------------------------
INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
AX = DE02h
Return: nothing
Note: this call is a NOP in DV 2.x
---------------------------------------------
INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
AX = DE03h
Return: AX = ??? for current window
BX = ??? for current window
Note: this call is a NOP in DV 2.x
---------------------------------------------
INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
AX = DE04h
Return: BX = bytes of common memory available
CX = largest block available
DX = total common memory in bytes
---------------------------------------------
INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
AX = DE05h
Return: BX = K of memory available
CX = largest block available
DX = total conventional memory in K
---------------------------------------------
INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
AX = DE06h
Return: BX = K of expanded memory available
CX = largest block available
DX = total expanded memory in K
---------------------------------------------
INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
AX = DE07h
Return: AX = number of program as it appears on the "Switch Windows" menu
---------------------------------------------
INT 15 - DESQview - GET ???
AX = DE08h
Return: AX = 0000h if ??? is not set to the current task
0001h if ??? is set to the current task
---------------------------------------------
INT 15 - DESQview - UNIMPLEMENTED
AX = DE09h
Return: nothing (NOP in DV 1.x and 2.x)
---------------------------------------------
INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
AX = DE0Ah
BL = character
Return: character displayed, next call will display in next position (which
wraps back to the start of the line if off the right edge of screen)
Notes: displays character on bottom line of *physical* screen, regardless
of current size of window (even entirely hidden)
does not know about graphics display modes, just pokes the characters
into display memory
---------------------------------------------
INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
AX = DE0Bh
BL = API level major version number
BH = API level minor version number
Return: AX = maximum API level (AL = major, AH = minor)
Note: if the requested API level is greater than the version of DESQview, a
"You need a newer version" error window is popped up
---------------------------------------------
INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
AX = DE0Ch
BX = number of bytes
Return: ES:DI -> allocated block
---------------------------------------------
INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
AX = DE0Dh
ES:DI -> previously allocated block
Return: nothing
---------------------------------------------
INT 15 - DESQview 2.x - FIND MAILBOX BY NAME
AX = DE0Eh
ES:DI -> name to find
CX = length of name
Return: BX = 0000h not found
0001h found
DS:SI = object handle
---------------------------------------------
INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS
AX = DE0Fh
Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
Notes: sends a manager stream with opcodes AEh, BDh, and BFh to task's window
enables an additional mouse mode
---------------------------------------------
INT 15 - DESQview 2.x - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
AX = DE10h
BH = scan code
BL = character
Return: nothing
Note: a later read will get the keystroke as if it had been typed by the user
early copies of DV 2.00 destroy AX, BX, ES, and DI
---------------------------------------------
INT 15 - DESQview 2.x - ENABLE/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW
AX = DE11h
BL = 00h viewport will not move automatically
nonzero viewport will move to keep cursor visible
Return: nothing
---------------------------------------------
INT 15 - DESQview 2.01+ - SET ???
AX = DE12h
BX = 0000h clear ??? flag
nonzero set ??? flag
Return: nothing
---------------------------------------------
INT 15 - DESQview 2.2 - GET CRITICAL NESTING COUNT
AX = DE13h
Return: BX = number of calls to BEGINC (see INT 15/AX=101Bh) without matching
ENDC (see INT 15/AX=101Ch)
---------------------------------------------
INT 15 - DESQview 2.2 - GET OBJECT TYPE
AX = DE14h
ES:DI -> object
Return: BL = 00h not an object
08h window or task
09h mailbox
0Ah keyboard
0Bh timer
0Ch objectq
0Fh pointer
10h panel
---------------------------------------------
INT 15 - DESQview 2.2 - SET MAILBOX ERROR HANDLING
AX = DE15h
BL = 00h post system error on conditions listed below
01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
messages sent to mailboxes which fail due to lack of system
or common memory
Return: nothing
---------------------------------------------
INT 15 - DESQview 2.2 - GET MAILBOX ERROR HANDLING
AX = DE16h
Return: BL = 00h post system error
01h return carry flag set
---------------------------------------------
INT 15 - DESQview 2.2 - reserved
AX = DE17h
Return: pops up "Programming error" window
Note: AX = 1117h is NOT identical to this call
---------------------------------------------
INT 15 - DESQview 2.2 - ???
AX = DE18h
Note: calls video driver (NOP for Hercules driver)
---------------------------------------------
INT 16 - KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
AH = 00h
Return: AH = scan code
AL = character
---------------------------------------------
INT 16 - KEYBOARD - CHECK BUFFER, DO NOT CLEAR
AH = 01h
Return: ZF clear if character in buffer
AH = scan code
AL = character
ZF set if no character in buffer
---------------------------------------------
INT 16 - KEYBOARD - GET SHIFT STATUS
AH = 02h
AL = shift status bits
0 = right shift key depressed
1 = left shift key depressed
2 = CTRL depressed
3 = ALT depressed
4 = SCROLL LOCK active
5 = NUM LOCK active
6 = CAPS LOCK active
7 = INSERT state active
---------------------------------------------
INT 16 - KEYBOARD - SET DELAYS (Jr,AT model 339,XT286,PS)
AH = 03h
AL = subfunction
00h reset typematic (PCjr)
01h increase initial delay (PCjr)
02h increase continuing delay (PCjr)
03h increase both delays (PCjr)
04h turn off typematic (PCjr)
05h Set typematic rate (AT or PS/2)
BH = 00h - 03h for delays of 250ms, 500ms, 750ms, or 1s
BL = 00h - 1Fh for typematic rates of 30cps down to 2cps
---------------------------------------------
INT 16 - KEYBOARD - KEYCLICK (Jr,CONV)
AH = 04h
AL = 00h click off
01h click on
---------------------------------------------
INT 16 - KEYBOARD - WRITE TO KEYBOARD BUFFER (AT model 339,XT2,XT286,PS)
AH = 05h
CH = scan code
CL = character
Return: AL = 1 if buffer full
---------------------------------------------
INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
AH = 10h
Return: AH = scan code
AL = character
---------------------------------------------
INT 16 - KEYBOARD - CHECK ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
AH = 11h
Return: ZF clear if keystroke available
AH = scan code \ meaningless if ZF = 1
AL = character /
ZF set if kbd buffer empty
---------------------------------------------
INT 16 - KEYBOARD - GET ENHANCED SHIFT FLAGS (AT model 339,XT2,XT286,PS)
AH = 12h
Return: AL = shift flags (same as for AH=02h)
bit 7: Ins ON
bit 6: CapsLock ON
bit 5: NumLock ON
bit 4: ScrollLock ON
bit 3: Either ALT key down
bit 2: Either CTRL key down
bit 1: Left shift key down
bit 0: Right shift key down
AH
bit 7: SysReq key down
bit 6: CapsLock key down
bit 5: NumLock key down
bit 4: ScrollLock key down
bit 3: Right Alt key down
bit 2: Right Ctrl key down
bit 1: Left Alt key down
bit 0: Right Alt key down
---------------------------------------------
INT 16 - PC Tools v5.1 BACKTALK - UNHOOK
AX = 6969h
BX = 6968h
Return: resident code unhooked, but not removed from memory
---------------------------------------------
INT 16 - PC Tools v5.1 BACKTALK - INSTALLATION CHECK
AX = 6969h
BX = 6969h
DX = 0000h
Return: DX nonzero if installed
BX = CS of resident code
DS:SI -> ASCIZ identification string "CPoint Talk"
---------------------------------------------
INT 16 - FAKEY.COM - INSTALLATION CHECK
AH = 70h
Return: AX = 1954h if installed
Note: FAKEY is a keystroke faking utility by System Enhancement Associates
---------------------------------------------
INT 16 - FAKEY.COM - PUSH KEYSTROKES
AH = 71h
CX = number of keystrokes
DS:SI -> array of words containing keystrokes to be returned by AH=00h
Note: FAKEY is a keystroke faking utility by System Enhancement Associates
---------------------------------------------
INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
AH = 72h
Note: FAKEY is a keystroke faking utility by System Enhancement Associates
---------------------------------------------
INT 16 - FAKEY.COM - PLAY TONES
AH = 73h
CX = number of tones to play
DS:SI -> array of tones (see below)
Note: FAKEY is a keystroke faking utility by System Enhancement Associates
Format of tone array entries:
Offset Size Description
00h WORD divisor for timer channel 2
02h WORD duration in clock ticks
---------------------------------------------
INT 16 - pcANYWHERE - SET TICK COUNT FOR SCANNING
AH = 75h
AL = number of ticks between checks for new screen changes
---------------------------------------------
INT 16 - pcANYWHERE - SET ERROR CHECKING TYPE
AH = 76h
AL = error checking type
00h none
01h fast
02h slow
---------------------------------------------
INT 16 - pcANYWHERE - LOG OFF
AH = 77h
AL = mode
00h wait for another call
01h leave in Memory Resident Mode
02h leave in Automatic Mode
FFh leave in current operating mode
---------------------------------------------
INT 16 - WATCH.COM - INSTALLATION CHECK
AX = 7761h ('wa')
Return: AX = 5741h ('WA') if installed
Note: WATCH.COM is part of the "TSR" package by Kim Kokkonen
---------------------------------------------
INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
AX = 7788h
BX = 7789h
Return: AX = 7789h
BX = 7788h
DS:SI -> signature string
---------------------------------------------
INT 16 - pcANYWHERE - CHECK STATUS
AH = 79h
Return: AX = status
FFFFh if resident and active
FFFEh if resident but not active
FFFDh if in Memory Resident mode
FFFCh if in Automatic mode
other value if not resident
---------------------------------------------
INT 16 - pcANYWHERE - CANCEL SESSION
AH = 7Ah
---------------------------------------------
INT 16 - pcANYWHERE - SUSPEND
AX = 7B00h
---------------------------------------------
INT 16 - pcANYWHERE - RESUME
AX = 7B01h
---------------------------------------------
INT 16 - pcANYWHERE - GET PORT CONFIGURATION
AH = 7Ch
Return: AH = port number
AL = baud rate
00h = 50 baud
01h = 75 baud
02h = 110 baud
03h = 134.5 baud
04h = 150 baud
05h = 300 baud
06h = 600 baud
07h = 1200 baud
08h = 1800 baud
09h = 2000 baud
0Ah = 2400 baud
0Bh = 4800 baud
0Ch = 7200 baud
0Dh = 9600 baud
0Eh = 19200 baud
---------------------------------------------
INT 16 - pcANYWHERE - GET/SET TERMINAL PARAMETERS
AH = 7Dh
AL = subfunction
00h set terminal parameters
01h get terminal parameters
02h get configuration header and terminal parameters
DS:CX -> terminal parameter block
---------------------------------------------
INT 16 - pcANYWHERE - COMMUNICATIONS I/O THROUGH PORT
AH = 7Eh
AL = subfunction
01h port input status
Return AX = 0 if no characer ready,
AX = 1 if character ready
02h port input character
Return AL = received character
03h port output character in CX
11h hang up phone
---------------------------------------------
INT 16 - pcANYWHERE - SET KEYBOARD/SCREEN MODE
AH = 7Fh
AL = subfunction
00h enable remote keyboard only
01h enable host keyboard only
02h enable both keyboards
08h display top 24 lines
09h display bottom 24 lines
10h Hayes modem
11h other modem
12h direct connect
---------------------------------------------
INT 16 - MAKEY.COM - INSTALLATION CHECK
AH = 80h
Return: AX = 1954h if installed
Note: MAKEY is a utility by System Enhancement Associates
---------------------------------------------
INT 16 - Compaq 386 - SET CPU SPEED
AH = F0h
AL = speed
00h equivalent to 6 MHz 80286 (COMMON)
01h equivalent to 8 MHz 80286 (FAST)
02h full 16 MHz (HIGH)
03h toggles between 8 MHz-equivalent and speed set by system board
switch (AUTO or HIGH)
08h full 16 MHz except 8 MHz-equivalent during floppy disk access
09h specify speed directly
CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
---------------------------------------------
INT 16 - Compaq 386 - READ CURRENT CPU SPEED
AH = F1h
Return: AL = speed code (see AH=F0h)
if AL = 09h, CX = speed code
---------------------------------------------
INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
AH = F2h
Return: AL = type
00h if 11-bit AT keyboard is in use
01h if 9-bit PC keyboard is in use
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFB8h
BH = subfunction
00h get
Return: BL = old value of ???
nonzero set
BL = new value for ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFB9h
???
Return: AX = ???
CX = ???
DS:SI -> ???
ES:DI -> ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFBAh
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFBBh
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - RESTORE ORIGINAL SCREEN???
AX = FFBCh
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - POP DOWN???
AX = FFBDh
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFBEh
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFBFh
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC0h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC1h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC2h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC3h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC4h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC5h
Return: BL = ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - SET ???
AX = FFC6h
BL = new value for ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC7h
???
Return: ???
Note: screen swapping???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - GET ???
AX = FFC8h
Return: DS:SI -> ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFC9h
SI = ???
CX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFCAh
DX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFCBh
DX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - DISPLAY ASCIZ STRING
AX = FFCCh
DS:SI -> ASCIZ string
Return: AX = ???
CX = ???
ES:DI -> address past last character displayed
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFCDh
DS:DX -> ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - SET ??? DELAYS
AX = FFCEh
CX = ???
Return: nothing???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFCFh
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD0h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD1h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD2h
BX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD3h
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - CREATE/OPEN/DELETE FILE
AX = FFD4h
BH = 3Ch create file
CX = file attributes
3Dh open file
41h delete file
BL = access mode
00h read only
01h write only
02h read/write
DS:SI -> ASCIZ filename
Return: BX = file handle
0000h on error
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD5h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD6h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD7h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - SAFE CREATE FILE
AX = FFD8h
DS:BX -> ASCIZ filename
Return: BX = file handle
0000h on error
Note: pops up confirmation menu if file already exists
only when popped up???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFD9h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFDAh
DS:SI -> ???
Return: DS:SI -> ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFDBh
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - UNHOOK
AX = FFDCh
Return: interrupt vectors 09h, 16h, 1Ch, and 21h restored to original values
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - INSTALLATION CHECK
AX = FFDDh
BX = 0000h
Return: CX = 5555h
DX = 5555h if PCShell installed in resident mode
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - REQUEST POP-UP
AX = FFDDh
BX = 0001h
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - GET ???
AX = FFDDh
BX = 0002h
Return: AL =
00h ???
01h ???
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - REQUEST POP-UP
AX = FFDDh
BX = 0003h
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - ???
AX = FFDDh
BX = 0004h
???
Return: DS:SI -> ???
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - ???
AX = FFDDh
BX = 0005h
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - ???
AX = FFDDh
BX = 0006h
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - ???
AX = FFDDh
BX = 0007h
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 PCShell API - ???
AX = FFDDh
BX = 0008h
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFDEh
DS:DX -> ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFDFh
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE0h
CX = ???
DX = ???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - BEEP
AX = FFE1h
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE2h
DX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE3h
BL = ???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE4h
DX = segment of ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE5h
DS:SI -> wildcard filename???
DX = ???
Return: AX = ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE6h
DS:SI -> ???
Return: AX = ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE7h
BX = segment of ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - DISPLAY NUMBER
AX = FFE8h
CX = number
DH = attribute
DS:SI -> destination for ASCII number
Return: DS:SI buffer filled in with alternating characters and attributes
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFE9h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - DISPLAY COUNTED STRING
AX = FFEAh
DS:SI -> counted string (count byte followed by string)
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFEBh
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFECh
DS:SI -> FAR routine to ???
BX = ???
Return: AX = ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFEDh
Return: AX = ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFEEh
SI = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - INSTALLATION CHECK
AX = FFEFh
CX = 0000h
Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
BX = segment of resident portion
AX = ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF0h
DX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ALTERNATE INSTALLATION CHECK
AX = FFF1h
BX = 0000h leave ??? flag as is
nonzero set ??? flag
Return: CX = 5555h if installed
DX = 5555h
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF2h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF3h
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF4h
???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
AX = FFF5h
Return: ES:BX -> array of screen attributes
00h BYTE normal characters on desktop menu
01h BYTE highlighted characters on desktop menu
02h BYTE
03h BYTE
etc.
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF6h
DS = ???
BX = ???
DX = ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF7h
SI = ???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF8h
DS:SI -> ???
BX = ???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFF9h
ES:BX -> FAR routine to ???
Return: ???
Note: available only when popped up
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFFAh
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFFBh
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - GET ???
AX = FFFCh
Return: ES:BX = ???
DS:DX = original INT 9 vector
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - ???
AX = FFFDh
???
Return: ???
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - SHOW MOUSE CURSOR
AX = FFFEh
---------------------------------------------
INT 16 - PC Tools v5.1 DESKTOP API - HIDE MOUSE CURSOR
AX = FFFFh
---------------------------------------------
INT 17 - PRINTER - OUTPUT CHARACTER
AH = 00h
AL = character
DX = printer port (0-3)
Return: AH = status bits
0 = time out
1 = unused
2 = unused
3 = I/O error
4 = selected
5 = out of paper
6 = acknowledge
7 = not busy
---------------------------------------------
INT 17 - PRINTER - INITIALIZE
AH = 01h
DX = printer port (0-3)
Return: AH = status (see AH=00h)
---------------------------------------------
INT 17 - PRINTER - GET STATUS
AH = 02h
DX = printer port (0-3)
Return: AH = status (see AH=00h)
---------------------------------------------
INT 18 - TRANSFER TO ROM BASIC
causes transfer to ROM-based BASIC (IBM-PC)
often reboots a compatible; often has no effect at all
---------------------------------------------
INT 19 - DISK BOOT
causes reboot of disk system (no memory test performed)
---------------------------------------------
INT 1A - CLOCK - GET TIME OF DAY
AH = 00h
Return: CX:DX = clock count
AL = 00h if clock was read or written (via AH=0,1) within the current
24-hour period
Otherwise, AL > 0
---------------------------------------------
INT 1A - CLOCK - SET TIME OF DAY
AH = 01h
CX:DX = clock count
Return: time of day set
---------------------------------------------
INT 1A - CLOCK - READ REAL TIME CLOCK (AT,XT286,CONV,PS)
AH = 02h
Return: CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
---------------------------------------------
INT 1A - CLOCK - SET REAL TIME CLOCK (AT,XT286,CONV,PS)
AH = 03h
CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
DL = 01h if daylight savings, 00h if standard time
Return: CMOS clock set
---------------------------------------------
INT 1A - CLOCK - READ DATE FROM REAL TIME CLOCK (AT,XT286,CONV,PS)
AH = 04h
Return: DL = day in BCD
DH = month in BCD
CL = year in BCD
CH = century (19h or 20h)
---------------------------------------------
INT 1A - CLOCK - SET DATE IN REAL TIME CLOCK (AT,XT286,CONV,PS)
AH = 05h
DL = day in BCD
DH = month in BCD
CL = year in BCD
CH = century (19h or 20h)
Return: CMOS clock set
---------------------------------------------
INT 1A - CLOCK - SET ALARM (AT,XT286,CONV,PS)
AH = 06h
CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
Return: CF set if alarm already set or clock inoperable
INT 4Ah will be called when alarm goes off, every 24 hours until reset
---------------------------------------------
INT 1A - CLOCK - RESET ALARM (AT,XT286,CONV,PS)
AH = 07h
Return: alarm disabled
---------------------------------------------
INT 1A - CLOCK - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
AH = 08h
CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
---------------------------------------------
INT 1A - CLOCK - READ RTC ALARM TIME AND STATUS (CONV,PS30)
AH = 09h
Return: CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
DL = alarm status
00h alarm not enabled
01h alarm enabled but will not power up system
02h alarm will power up system
---------------------------------------------
INT 1A - CLOCK - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
AH = 0Ah
Return: CF set on error
CX = count of days since Jan 1,1980
---------------------------------------------
INT 1A - CLOCK - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
AH = 0Bh
CX = count of days since Jan 1,1980
Return: CF set on error
---------------------------------------------
INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
AH = 80h
AL = 00h source is 8253 channel 2
01h source is cassette input
02h source is I/O channel "Audio IN"
03h source is sound generator chip
---------------------------------------------
INT 1A - AT&T 6300 - READ TIME AND DATE
AH = FEh
Return: BX = day count (1 = Jan 1, 1984)
CH = hour
CL = minute
DH = second
DL = hundredths
---------------------------------------------
INT 1B - CTRL-BREAK KEY
This interrupt is called when the keyboard scanner of the IBM
machines detects CTRL and BREAK pressed at the same time. It
normally points to a short routine in DOS which sets the
Ctrl-C flag, thus invoking INT 23h the next time DOS checks
for Ctrl-C.
---------------------------------------------
INT 1C - CLOCK TICK
This interrupt is called (in the IBM) at the end of each time-update
operation by the time-of-day routines. It normally points to an IRET.
---------------------------------------------
INT 1D - (NOT a vector!) 6845 VIDEO INIT TABLES
Format of video init tables:
Offset Size Description
00h 16 BYTEs table for modes 0 and 1 \
10h 16 BYTEs table for modes 2 and 3 \ each table contains values
20h 16 BYTEs table for modes 4, 5, and 6 / for first sixteen 6485 regs
30h 16 BYTEs table for mode 7 /
40h WORD size of video RAM for modes 0 and 1
42h WORD size of video RAM for modes 2 and 3
44h WORD size of video RAM for modes 4 and 5
46h WORD size of video RAM for modes 6 and 7
48h 8 BYTEs number of colums in each of modes 0 through 7
50h 8 BYTEs video controller mode byte for each mode
---------------------------------------------
INT 1E - (NOT a vector!) DISKETTE PARAMS (BASE TABLE)
default parameters at F000h:EFC7h in PC and most compatibles
Format of diskette parameters:
Offset Size Description
00h BYTE step rate & head unload times
01h BYTE head load time & DMA
02h BYTE motor off time in clock ticks (36 or 37 typical)
03h BYTE sector size in bytes (0->128, 1->256, 2->512, 3->1024)
04h BYTE last sector number (8 or 9 typical)
05h BYTE inter-sector gap size on read/write (42 typical)
06h BYTE data transfer length (255 typical)
07h BYTE inter-sector gap size on format (80 typical)
08h BYTE sector fill on format (F6h typical)
09h BYTE head-settle time ms (typical 25, 1.10->0, 2.10->15, 3.10->1)
0Ah BYTE motor start-up time (1/8 secs) (typical 4, 2.10->2)
---------------------------------------------
INT 1F - (NOT a vector!) GRAPHICS SET 2
pointer to bitmaps for high 128 chars
---------------------------------------------
INT 20 - Minix - SEND/RECEIVE MESSAGE
AX = process ID of other process
BX -> message
CX = 1 send
2 receive
3 send&receive
Note: the message contains the system call number (numbered as in V7 Unix(tm))
and the call parameters
---------------------------------------------
INT 20 - DOS - PROGRAM TERMINATION
returns to DOS--identical to INT 21/AH=00h
---------------------------------------------
INT 21 - DOS - PROGRAM TERMINATION
AH = 00h
Return: never
---------------------------------------------
INT 21 - DOS - KEYBOARD INPUT
AH = 01h
Return: AL = character read
Note: ^C/^Break are checked, and INT 23h executed if read
character is echoed to standard output
---------------------------------------------
INT 21 - DOS - DISPLAY OUTPUT
AH = 02h
DL = character to send to standard output
Note: ^C/^Break are checked, and INT 23h executed if pressed
---------------------------------------------
INT 21 - DOS - AUX INPUT
AH = 03h
Return: AL = character read
---------------------------------------------
INT 21 - DOS - AUX OUTPUT
AH = 04h
DL = character to send
---------------------------------------------
INT 21 - DOS - PRINTER OUTPUT
AH = 05h
DL = character to print
---------------------------------------------
INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER OUTPUT
AH = 06h
DL = character <> FFh
---------------------------------------------
INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER INPUT
AH = 06h
DL = 0FFh
Return: ZF set = no character
ZF clear = character recieved
AL = character
Notes: Character is echoed to STDOUT if received.
^C/^Break are NOT checked
---------------------------------------------
INT 21 - DOS - DIRECT STDIN INPUT, NO ECHO
AH = 07h
Note: same as function 06h for input but char not echoed
---------------------------------------------
INT 21 - DOS - KEYBOARD INPUT, NO ECHO
AH = 08h
Return: AL = character
Note: same as function 07h, but ^C/^Break are checked
---------------------------------------------
INT 21 - DOS - PRINT STRING
AH = 09h
DS:DX -> string terminated by "$"
Note: ^C/^Break checked, and INT 23h called if pressed
---------------------------------------------
INT 21 - DOS - BUFFERED KEYBOARD INPUT
AH = 0Ah
DS:DX -> buffer
Note: first byte of buffer must contain maximum length
on entry, second byte contains actual length of previous line which may
be recalled with the DOS line-editing commands
on return the second byte contains actual length, third and
subsequent bytes contain the input line
---------------------------------------------
INT 21 - DOS - CHECK STANDARD INPUT STATUS
AH = 0Bh
Return: AL = FFh if character available
00h if no character
Note: ^C/^Break checked, and INT 23h called if pressed
---------------------------------------------
INT 21 - DOS - CLEAR KEYBOARD BUFFER
AH = 0Ch
AL must be 1, 6, 7, 8, or 0Ah.
Notes: Flushes all typeahead input, then executes function specified by AL
(effectively moving it to AH and repeating the INT 21 call).
If AL contains a value not in the list above, the keyboard buffer is
flushed and no other action is taken.
---------------------------------------------
INT 21 - DOS - DISK RESET
AH = 0Dh
Note: Flushes all disk buffers.
---------------------------------------------
INT 21 - DOS - SELECT DISK
AH = 0Eh
DL = new default drive number (0 = A, 1 = B, etc.)
Return: AL = number of logical drives
---------------------------------------------
INT 21 - DOS - OPEN DISK FILE
AH = 0Fh
DS:DX -> FCB (see below)
Return: AL = 00h file found
FFh file not found
Note: (DOS 3+) file opened in compatibility mode
Format of File Control Block:
Offset Size Description
-7 BYTE extended FCB if FFh
-6 5 BYTEs reserved
-1 BYTE file attribute if extended FCB
00h BYTE drive number (0 = default, 1 = A, etc)
01h 8 BYTEs blank-padded file name
09h 3 BYTEs blank-padded file extension
0Ch WORD current block number
0Eh WORD logical record size
10h DWORD file size
14h WORD date of last write (see AX=5700h)
16h WORD time of last write (see AX=5700h)
18h 8 BYTEs reserved (see below)
20h BYTE record within current block
21h DWORD random access record number (if record size is > 64 bytes, high
byte is omitted)
Format of reserved field for DOS 3.x:
Offset Size Description
18h BYTE number of system file table entry for file
19h BYTE attributes
bits 7,6: 00 = SHARE.EXE not loaded, disk file
01 = SHARE.EXE not loaded, character device
10 = SHARE.EXE loaded, remote file
11 = SHARE.EXE loaded, local file
bits 5-0: low six bits of device attribute word
---SHARE.EXE loaded, local file---
1Ah WORD starting cluster of file
1Ch WORD offset within SHARE of sharing record (see AH=52h)
1Eh BYTE file attribute
1Fh BYTE ???
---SHARE.EXE loaded, remote file---
1Ah WORD number of sector containing directory entry
1Ch WORD relative cluster within file of last cluster read
1Eh BYTE absolute cluster number of last cluster read
1Fh BYTE ???
---SHARE.EXE not loaded---
1Ah BYTE (low byte of device attribute word AND 0Ch) OR open mode
1Bh WORD starting cluster of file
1Dh WORD number of sector containing directory entry
1Fh BYTE number of directory entry within sector
Note: if FCB opened on character device, DWORD at 1Ah is set to the address
of the device driver header, then the BYTE at 1Ah is overwritten.
---------------------------------------------
INT 21 - DOS - CLOSE DISK FILE
AH = 10h
DS:DX -> FCB (see AH=0Fh)
Return: AL = 00h directory update successful
FFh file not found in directory
---------------------------------------------
INT 21 - DOS - SEARCH FIRST USING FCB
AH = 11h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status
00h file found
[DTA] = unopened FCB for file that was found
FFh file not found
---------------------------------------------
INT 21 - DOS - SEARCH NEXT USING FCB
AH = 12h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status
00h file found
[DTA] = unopened FCB for file that was found
FFh file not found
---------------------------------------------
INT 21 - DOS - DELETE FILE via FCB
AH = 13h
DS:DX -> FCB (see AH=0Fh) with filename field filled with template for
deletion ('?' wildcard allowed, but not '*')
Return: AL = status
00h file found
FFh file not found
---------------------------------------------
INT 21 - DOS - SEQUENTIAL DISK FILE READ
AH = 14h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status
00h successful read
01h end of file
02h data transfer area too small
03h partial record, EOF
---------------------------------------------
INT 21 - DOS - SEQUENTIAL DISK RECORD WRITE
AH = 15h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status
00h successful write
01h disk full
02h data transfer area too small
---------------------------------------------
INT 21 - DOS - CREATE A DISK FILE
AH = 16h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status
00h successful creation
FFh directory full
Note: if file already exists, it is truncated to zero length
---------------------------------------------
INT 21 - DOS - RENAME FILE via FCB
AH = 17h
DS:DX -> FCB (see AH=0Fh)
FCB contains new name starting at byte 17h.
Return: AL = status
00h file found
FFh file not found
---------------------------------------------
INT 21 - DOS internal - UNUSED
AH = 18h
Return: AL = 00h
---------------------------------------------
INT 21 - DOS - GET DEFAULT DISK NUMBER
AH = 19h
Return: AL = current drive number (letter - 'A')
---------------------------------------------
INT 21 - DOS - SET DISK TRANSFER AREA ADDRESS
AH = 1Ah
DS:DX -> disk transfer buffer
---------------------------------------------
INT 21 - DOS - ALLOCATION TABLE INFORMATION
AH = 1Bh
Return: DS:BX -> FAT ID byte for default drive
DX = number of allocation units on disk
AL = number of sectors per allocation unit (cluster)
CX = number of bytes per sector
---------------------------------------------
INT 21 - DOS - ALLOCATION TABLE INFORMATION FOR SPECIFIC DEVICE
AH = 1Ch
DL = drive number to check
Return: DS:BX -> FAT ID byte
DX = number of allocation units on disk
AL = number of sectors per allocation unit (cluster)
CX = number of bytes per sector
---------------------------------------------
INT 21 - DOS internal - UNUSED
AH = 1Dh
Return: AL = 00h
---------------------------------------------
INT 21 - DOS internal - UNUSED
AH = 1Eh
Return: AL = 00h
---------------------------------------------
INT 21 - DOS internal - GET DEFAULT DRIVE PARAMETER BLOCK
AH = 1Fh
Return: AL = 00h No Error
FFh Error
DS:BX -> drive parameter block
Note: for DOS 2+, this just invokes function 32h with DL = 0
---------------------------------------------
INT 21 - DOS internal - UNUSED
AH = 20h
Return: AL = 00h
---------------------------------------------
INT 21 - DOS - RANDOM DISK RECORD READ
AH = 21h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status
00h successful read
01h end of file
02h data transfer area too small
03h partial record, EOF
---------------------------------------------
INT 21 - DOS - RANDOM DISK RECORD WRITE
AH = 22h
DS:DX -> FCB (see AH=0Fh)
Return: AL = status (see AH=21h)
---------------------------------------------
INT 21 - DOS - GET FILE SIZE
AH = 23h
DS:DX -> unopened FCB (see AH=0Fh) with filename and record size
fields initialized
Return: AL = status
00h file found
FFh file not found
Note: FCB's random-record field set to number of records (rounded up)
---------------------------------------------
INT 21 - DOS - SET RANDOM RECORD FIELD
AH = 24h
DS:DX -> open FCB (see AH=0Fh)
Return: Random Record Field of FCB is set to be same as Current Block
and Current Record.
---------------------------------------------
INT 21 - DOS - SET INTERRUPT VECTOR
AH = 25h
AL = interrupt number
DS:DX = new vector to be used for specified interrupt
---------------------------------------------
INT 21 - DOS - CREATE PSP
AH = 26h
DX = segment number at which to set up PSP
Return: current PSP is copied to specified segment
Note: new PSP is updated with memory size information; INTs 22h, 23h, 24h
taken from interrupt vector table
Format of PSP:
Offset Size Description
00h 2 BYTEs program exit point
02h WORD memory size in paragraphs
04h BYTE unused
05h 5 BYTEs CP/M entry point
0Ah DWORD terminate address (old INT 22h)
0Eh DWORD break address (old INT 23h)
12h DWORD critical error handler (old INT 24h)
16h WORD parent PSP segment
18h 20 BYTEs DOS 2+ open file table, FFh = unused
2Ch WORD DOS 2+ environment segment
2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call
32h WORD DOS 3+ max open files
34h DWORD DOS 3+ open file table address
38h DWORD DOS 3+ ??? (set to FFFFFFFFh in DOS 3.1 and 3.3)
3Ch 20 BYTEs unused by DOS versions <= 3.3
50h 3 BYTEs DOS function dispatcher (FAR routine)--CDh 21h CBh
53h 9 BYTEs unused
5Ch 16 BYTEs FCB #1 (see AH=0Fh), filled in from first commandline argument
(when opened, overwrites following FCB)
6Ch 20 BYTEs FCB #2 (see AH=0Fh), filled in from second commandline argument
(when opened, overwrites part of command tail)
80h 128 BYTEs command tail / default DTA buffer
command tail is BYTE for length of tail, N BYTEs for the tail,
followed by a BYTE containing 0Dh
---------------------------------------------
INT 21 - DOS - RANDOM BLOCK READ
AH = 27h
DS:DX -> FCB (see AH=0Fh)
CX = number of records to be read
Return: AL = status
00h successful read
01h end of file
02h data transfer area too small
03h partial record, EOF
---------------------------------------------
INT 21 - DOS - RANDOM BLOCK WRITE
AH = 28h
DS:DX -> FCB (see AH=0Fh)
CX = number of records to be written
if zero, truncate file to current random file position
Return: AL = status
00h successful write
01h disk full
02h data transfer area too small
---------------------------------------------
INT 21 - DOS - PARSE FILENAME
AH = 29h
DS:SI -> string to parse
ES:DI -> buffer to fill with unopened FCB (see AH=0Fh)
AL = bit mask to control parsing
0 = 0: parsing stops if file separator found
1: leading separators ignored
1 = 0: drive number in FCB set to default drive if not present
in string
1: drive number in FCB not changed
2 = 0: filename in FCB set to blanks if no filename in string
1: filename in FCB not changed if string does not contain
a filename
3 = 0: extension in FCB set to blanks if no extension in string
1: extension left unchanged
Return: AL = 00h no wildcards in name or extension
01h wildcards appeared
FFh drive specifier invalid
DS:SI -> first byte after parsed string
ES:DI buffer filled with unopened FCB
---------------------------------------------
INT 21 - DOS - GET CURRENT DATE
AH = 2Ah
Return: DL = day
DH = month
CX = year
AL = day of the week (0=Sunday, 1=Monday, etc.)
---------------------------------------------
INT 21 - DOS - SET CURRENT DATE
AH = 2Bh
DL = day
DH = month
CX = year
Return: AL = 00h if no error
= FFh if bad value sent to routine
Note: DOS 3.3+ also sets CMOS clock
---------------------------------------------
INT 21 - DESQview - INSTALLATION CHECK
AH = 2Bh
AL = subfunction (DV v2.00+)
01h get version
Return: BX = version (BH = major, BL = minor)
Note: early copies of v2.00 return 0002h
02h get shadow buffer info, and start shadowing
Return: BH = rows in shadow buffer
BL = columns in shadow buffer
DX = segment of shadow buffer
04h get shadow buffer info
Return: BH = rows in shadow buffer
BL = columns in shadow buffer
DX = segment of shadow buffer
05h stop shadowing
CX = 4445h ('DE')
DX = 5351h ('SQ')
Return: AL = FFh if DESQview not installed
Note: in DESQview v1.x, there were no subfunctions; this call only identified
whether or not DESQview was loaded
---------------------------------------------
INT 21 - PC Tools v5.1 PC-CACHE - INSTALLATION CHECK
AH = 2Bh
CX = 4358h ('CX')
Return: AL = FFh if PC-CACHE not installed
AL = 00h if installed
CX = 6378h
BX = ???
DX = ???
---------------------------------------------
INT 21 - DOS - GET CURRENT TIME
AH = 2Ch
Return: CH = hours
CL = minutes
DH = seconds
DL = hundredths of seconds
Note: time is updated approximately every 5/100 second
---------------------------------------------
INT 21 - DOS - SET CURRENT TIME
AH = 2Dh
CH = hours
CL = minutes
DH = seconds
DL = hundredths of seconds
Return: AL = 00h if no error
= FFh if bad value sent to routine
Note: DOS 3.3+ also sets CMOS clock
---------------------------------------------
INT 21 - DOS - SET VERIFY FLAG
AH = 2Eh
DL = 00h
AL = 01h VERIFY on
00h VERIFY off
---------------------------------------------
INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
AH = 2Fh
Return: ES:BX -> DTA
---------------------------------------------
INT 21 - DOS 2+ - GET DOS VERSION
AH = 30h
Return: AL = Major Version number (0 for DOS 1.x)
AH = Minor Version number
BH = OEM number
00h IBM
16h DEC
BL:CX = 24-bit user number
---------------------------------------------
INT 21 - DOS 2+ - TERMINATE BUT STAY RESIDENT
AH = 31h
AL = exit code
DX = program size, in paragraphs
---------------------------------------------
INT 21 - DOS 2+ internal - GET DRIVE PARAMETER BLOCK
AH = 32h
DL = drive number
0 = default, 1 = A, etc.
Return: AL = 0FFh if invalid drive number, else
DS:BX -> drive parameter block
Format of DOS Drive Parameter Block:
Offset Size Description
00h BYTE drive number (0 = A, etc.)
01h BYTE unit number within device driver
02h WORD number of bytes per sector
04h BYTE largest sector number in cluster (one less than sect/clust)
05h BYTE log base two of the cluster size
06h WORD number of reserved (boot) sectors
08h BYTE number of copies of the FAT
09h WORD number of root directory entries
0Bh WORD first data sector on medium
0Dh WORD largest possible cluster number (one more than # data clust)
---DOS 2.x---
0Fh BYTE number of sectors in one FAT copy
10h WORD first sector of root directory
12h DWORD address of device driver for this drive
16h BYTE media descriptor byte for medium
17h BYTE FFh indicates block must be rebuilt
18h DWORD address of next device block, offset = FFFFh indicates last
1Ch WORD starting cluster of current directory (0 = root directory)
1Eh 64 BYTEs ASCIZ current directory path string
---DOS 3.x---
0Fh BYTE number of sectors in one FAT copy
10h WORD first sector of root directory
12h DWORD address of device driver for this drive
16h BYTE media descriptor byte for medium
17h BYTE FFh = block must be rebuilt, 00h indicates block accessed
18h DWORD address of next device block, offset = FFFFh indicates last
1Ch WORD cluster at which to start search for free space when writing
1Eh WORD number of free clusters on drive, FFFFh = unknown
---DOS 4.0---
0Fh WORD number of sectors in one FAT copy
11h WORD first sector of root directory
13h DWORD address of device driver for this drive
17h BYTE media descriptor byte for medium
18h BYTE FFh = block must be rebuilt, 00h indicates block accessed
19h DWORD address of next device block, offset = FFFFh indicates last
1Dh WORD cluster at which to start search for free space when writing
1Fh WORD number of free clusters on drive, FFFFh = unknown???
---------------------------------------------
INT 21 - DOS 2+ - EXTENDED CONTROL-BREAK CHECKING
AH = 33h
AL = subfunction
00h get state
01h set state
DL = 00h for OFF or 01h for ON
02h (DOS 3.x internal) get and set state
DL = 00h for OFF or 01h for ON
Return: DL = old BREAK setting
Return: DL = current BREAK setting if AL = 00h
00h BREAK=OFF
01h BREAK=ON
AL = FFh if error
Note: under DOS 3+, this function does not use any of the DOS-internal stacks
and is thus fully reentrant
---------------------------------------------
INT 21 - DOS 4.0 - GET BOOT DRIVE
AX = 3305h
Return: DL = boot drive (1=A:,...)
---------------------------------------------
INT 21 - DOS 2+ internal - RETURN CritSectFlag POINTER
AH = 34h
Return: ES:BX -> 1-byte DOS "Critical Section Flag", also known as InDOS flag
Notes: when the critical section flag is nonzero, code within DOS is being
executed. It is safe to enter DOS when both the critical section flag
and the critical error flag are zero.
The critical error flag is the byte after the critical section flag in
DOS 2.x, and the byte BEFORE the critical section flag in DOS 3.x
(except COMPAQ DOS 3.0, where the critical error flag is located 1AAh
bytes BEFORE the critical section flag)
---------------------------------------------
INT 21 - DOS 2+ - GET INTERRUPT VECTOR
AH = 35h
AL = interrupt number
Return: ES:BX = value of interrupt vector
---------------------------------------------
INT 21 - DOS 2+ - GET DISK SPACE
AH = 36h
DL = drive code (0 = default, 1 = A, 2 = B, etc.)
Return: AX = number of sectors per cluster
or 0FFFFh if invalid drive
BX = number of available clusters
CX = bytes per sector
DX = total clusters
Note: multiply AX * CX * BX for free space on disk
multiply AX * CX * DX for total disk space
---------------------------------------------
INT 21 - DOS 2+ internal - GET SWITCHAR
AX = 3700h
Return: AL = FFh unsupported subfunction
DL = current switch character
---------------------------------------------
INT 21 - DOS 2+ internal - SET SWITCHAR
AX = 3701h
DL = new switch character
Return: AL = FFh unsupported subfunction
---------------------------------------------
INT 21 - DOS 2.x only internal - AVAILDEV
AH = 37h
AL = subfunction
02h read device availability (as set by AL=03h)
Return: DL = device availability
03h set device availability, where:
DL = 00h means \DEV\ must preceed device names
DL <> 00h means \DEV\ need not preceed device names
Return: AL = FFh if invalid subfunction
---------------------------------------------
INT 21 - DOS 2+ - GET COUNTRY-DEPENDENT INFORMATION
AH = 38h
--DOS 2.x--
AL = 00h get current-country info
DS:DX -> buffer for returned info (see below)
Return: BX = country code
buffer at DS:DX filled
--DOS 3+--
AL = 00h for current country
AL = 01h thru 0FEh for specific country with code <255
AL = 0FFh for specific country with code >= 255
BX = 16-bit country code
DS:DX -> buffer for returned info (see below)
Return: CF set on error
AX = error code (02h)
CF clear if successful
BX = country code
DS:DX buffer filled
Format of DOS 2.x country info:
Offset Size Description
00h WORD date format 0 = USA mm dd yy
1 = Europe dd mm yy
2 = Japan yy mm dd
02h BYTE currency symbol
03h BYTE 00h
04h BYTE thousands separator char
05h BYTE 00h
06h BYTE decimal separator char
07h BYTE 00h
08h 24 BYTEs reserved
Format of DOS 3+ country info:
Offset Size Description
00h WORD date format (see above)
02h 5 BYTEs ASCIZ currency symbol string
07h BYTE thousands separator char
08h BYTE 00h
09h BYTE decimal separator char
0Ah BYTE 00h
0Bh BYTE date separator char
0Ch BYTE 00h
0Dh BYTE time separator char
0Eh BYTE 00h
0Fh BYTE currency format
bit 2 = set if currency symbol replaces decimal pt
bit 1 = number of spaces between value and curr sym
bit 0 = 0 if currency symbol precedes value
1 if currency symbol follows value
10h BYTE number of digits after decimal in currency
11h BYTE time format
bit 0 = 0 if 12-hour clock
1 if 24-hour clock
12h DWORD address of case map routine (FAR CALL, AL = char to map)
16h BYTE data-list separator char
17h BYTE 00h
18h 10 BYTEs reserved
---------------------------------------------
INT 21 - DOS 3+ - SET COUNTRY CODE
AH = 38h
AL = 01h thru 0FEh for specific country with code <255
AL = FFh for specific country with code >= 255
BX = 16-bit country code
DX = FFFFh
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
---------------------------------------------
INT 21 - DOS 2+ - CREATE A SUBDIRECTORY (MKDIR)
AH = 39h
DS:DX -> ASCIZ pathname
Return: CF set on error
AX = error code (03h,05h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - REMOVE A DIRECTORY ENTRY (RMDIR)
AH = 3Ah
DS:DX -> ASCIZ pathname
Return: CF set on error
AX = error code (03h,05h,06h,10h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - CHANGE THE CURRENT DIRECTORY (CHDIR)
AH = 3Bh
DS:DX -> ASCIZ directory name
Return: CF set on error
AX = error code (03h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - CREATE A FILE WITH HANDLE (CREAT)
AH = 3Ch
CX = attributes for file
bit 0: read-only
1: hidden
2: system
3: volume label
4: reserved, must be zero (directory)
5: archive bit
7: if set, file is shareable under Novell NetWare
DS:DX -> ASCIZ filename
Return: CF set on error
AX = error code (03h,04h,05h) (see AH=59h)
CF clear if successful
AX = file handle
---------------------------------------------
INT 21 - DOS 2+ - OPEN DISK FILE WITH HANDLE
AH = 3Dh
AL = access mode
00h read only
01h write only
02h read/write
AL bits 7-3 = file-sharing modes (DOS 3+)
bit 7 = inheritance flag, set for no inheritance
bits 4-6 = sharing mode
000 compatibility mode
001 exclusive (deny all)
010 write access denied (deny write)
011 read access denied (deny read)
100 full access permitted (deny none)
bit 3 = reserved, should be zero
DS:DX -> ASCIZ filename
Return: CF set on error
AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
CF clear if successful
AX = file handle
---------------------------------------------
INT 21 - DOS 2+ - CLOSE A FILE WITH HANDLE
AH = 3Eh
BX = file handle
Return: CF set on error
AX = error code (06h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - READ FROM FILE WITH HANDLE
AH = 3Fh
BX = file handle
CX = number of bytes to read
DS:DX -> buffer
Return: CF set on error
AX = error code (05h,06h) (see AH=59h)
CF clear if successful
AX = number of bytes read (0 if at EOF before call)
---------------------------------------------
INT 21 - DOS 2+ - WRITE TO FILE WITH HANDLE
AH = 40h
BX = file handle
CX = number of bytes to write
DS:DX -> buffer
Return: CF set on error
AX = error code (05h,06h) (see AH=59h)
CF clear if successful
AX = number of bytes actually written
Note: if CX is zero, no data is written, and the file is truncated or extended
to the current position
---------------------------------------------
INT 21 - DOS 2+ - DELETE A FILE (UNLINK)
AH = 41h
DS:DX -> ASCIZ name of file to delete
Return: CF set on error
AX = error code (02h,05h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
AH = 42h
AL = method
00h offset from beginning of file
01h offset from present location
02h offset from end of file
BX = file handle
CX:DX = offset in bytes
Return: CF set on error
AX = error code (01h,06h) (see AH=59h)
CF clear if successful
DX:AX = new offset
---------------------------------------------
INT 21 - DOS 2+ - GET FILE ATTRIBUTES
AX = 4300h
DS:DX -> ASCIZ file name
Return: CF set on error
AX = error code (01h,02h,03h,05h) (see AH=59h)
CF clear if successful
CX = file attributes (see AX=4301h)
---------------------------------------------
INT 21 - DOS 2+ - PUT FILE ATTRIBUTES (CHMOD)
AX = 4301h
CX = file attribute bits
bit 0 = read only
1 = hidden file
2 = system file
3 = volume label
4 = subdirectory
5 = written since backup ("archive" bit)
8 = shareable (Novell NetWare)
DS:DX -> ASCIZ file name
Return: CF set on error
AX = error code (01h,02h,03h,05h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
AX = 4400h
BX = file or device handle
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
DX = device info
If bit 7 set: (character device)
bit 0: console input device
1: console output device
2: NUL device
3: CLOCK$ device
4: device is special
5: binary (raw) mode
6: Not EOF
12: network device (DOS 3+)
14: can process IOCTL control strings (see AL = 02h-05h)
If bit 7 clear: (file)
bits 0-5 are block device number
6: file has not been written
12: network device (DOS 3+)
14: ??? (DOS 3+)
15: file is remote (DOS 3+)
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
AX = 4401h
BX = device handle
DH = 0
DL = device information to set (bits 0-7 from function 0)
Return: CF set on error
AX = error code (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - READ CHARACTER DEVICE CONTROL STRING
AX = 4402h
BX = device handle
CX = number of bytes to read
DS:DX -> buffer
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX = number of bytes read
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - WRITE CHARACTER DEVICE CONTROL STRING
AX = 4403h
BX = device handle
CX = number of bytes to write
DS:DX -> buffer
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX = number of bytes written
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - READ BLOCK DEVICE CONTROL STRING
AX = 4404h
BL = drive number (0=default)
CX = number of bytes to read
DS:DX -> buffer
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX = number of bytes read
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - WRITE BLOCK DEVICE CONTROL STRING
AX = 4405h
BL = drive number (0=default)
CX = number of bytes to write
DS:DX -> buffer
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX = number of bytes written
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
AX = 4406h
BX = file or device handle
Return: AL = FFh device ready
00h device not ready
---------------------------------------------
INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
AX = 4407h
BX = file or device handle
Return: AL = FFh device ready
00h device not ready
Note: for DOS 2.x, files are always ready for output
---------------------------------------------
INT 21 - DOS 3+ - IOCTL - BLOCK DEVICE CHANGEABLE
AX = 4408h
BL = drive number (0=default)
Return: AX = 00h removable
01h fixed
0Fh invalid drive
---------------------------------------------
INT 21 - DOS 3+ - IOCTL - BLOCK DEVICE LOCAL
AX = 4409h
BL = drive number (0=default)
Return: DX = attribute word, bit 12 set if device is remote
---------------------------------------------
INT 21 - DOS 3+ - IOCTL - HANDLE LOCAL
AX = 440Ah
BX = file handle
Return: DX = attribute word, bit 15 set if file is remote
Note: if file is remote, Novell Advanced NetWare 2.0 returns the number of
the file server on which the handle is located in CX
---------------------------------------------
INT 21 - DOS 3+ - IOCTL - SET SHARING RETRY COUNT
AX = 440Bh
CX = delay (default 1)
DX = retry count (default 3)
Return: CF set on error
AX = error code (see AH=59h)
---------------------------------------------
INT 21 - DOS 3.2+ - IOCTL - GENERIC
AX = 440Ch
BX = device handle
CH = category code
00h unknown (DOS 3.3+)
01h COMn: (DOS 3.3+)
03h CON (DOS 3.3+)
05h LPTn:
CL = function
45h set iteration count
4Ah select code page
4Ch start code-page preparation
4Dh end code-page preparation
5Fh set display information (DOS 4.0)
65h get iteration count
6Ah query selected code page
6Bh query prepare list
7Fh get display information (DOS 4.0)
DS:DX -> parameter block (see below)
Return: CF set on error
AX = error code (see AH=59h)
Format of parameter block for function 45h:
Offset Size Description
00h WORD number of times output is attempted before driver assumes
device is busy
Format of parameter block for functions 4Ah and 6Ah:
Offset Size Description
00h WORD length of data
02h WORD code page ID
04h 2N BYTEs DCBS (double byte character set) lead byte range
start/end for each of N ranges (DOS 4.0)
WORD 0000h end of data (DOS 4.0)
Format of parameter block for function 4Dh:
Offset Size Description
00h WORD length of data
02h WORD code page ID
Format of parameter block for function 4Ch:
Offset Size Description
00h WORD flags
02h WORD length of remainder of parameter block
04h WORD number of code pages following
06h N WORDs code page 1,...,N
Format of parameter block for functions 5Fh and 7Fh:
Offset Size Description
00h BYTE level (0 for DOS 4.0)
01h BYTE reserved (0)
02h WORD length of following data (14)
04h WORD control flags
bit 0 set for blink, clear for intensity
bits 1 to 15 reserved
06h BYTE mode type (1=text, 2=graphics)
07h BYTE reserved (0)
08h WORD colors
0 = monochrome
else N bits per pixel
0Ah WORD pixel columns
0Ch WORD pixel rows
0Eh WORD character columns
10h WORD character rows
Format of parameter block for function 6Bh:
Offset Size Description
00h WORD length of following data
02h WORD number of hardware code pages
04h N WORDs hardware code pages 1,...,N
WORD number of prepared code pages
N WORDs prepared code pages 1,...,N
---------------------------------------------
INT 21 - DOS 3.2+ - IOCTL - BLOCK DEVICE REQUEST
AX = 440Dh
BL = drive number (0=default)
CH = category code
08h disk drive
CL = function
40h set device parameters
41h write logical device track
42h format and verify logical device track
47h set access flag (DOS 4.0)
60h get device parameters
61h read logical device track
62h verify logical device track
67h get access flag (DOS 4.0)
DS:DX -> parameter block (see below)
Return: CF set on error
AX = error code (see AH=59h)
Note: DOS 4.01 seems to ignore the high byte of the number of directory entries
in the BPB for diskettes.
Format of parameter block for functions 40h, 60h:
Offset Size Description
00h BYTE special functions
bit 0 set if function to use current BPB, clear if Device BIOS
Parameter Block field contains new default BPB
bit 1 set if function to use track layout fields only
must be clear if CL=60h
bit 2 set if all sectors in track same size (should be set)
bits 3-7 reserved
01h BYTE device type
00h 320K/360K disk
01h 1.2M disk
02h 720K disk
03h single-density 8-inch disk
04h double-density 8-inch disk
05h fixed disk
06h tape drive
07h 1.44M disk
08h other type of block device
02h WORD device attributes
bit 0 set if nonremovable medium
bit 1 set if door lock supported
bits 2-15 reserved
04h WORD number of cylinders
06h BYTE media type
00h 1.2M disk (default)
01h 320K/360K disk
07h 31 BYTEs device BPB (see AH=53h)
26h WORD number of sectors per track (start of track layout field)
28h N word pairs: number,size of each sector in track
Format of parameter block for functions 41h, 61h:
Offset Size Description
00h BYTE reserved, must be zero
01h WORD number of disk head
03h WORD number of disk cylinder
05h WORD number of first sector to read/write
07h WORD number of sectors
09h DWORD transfer address
Format of parameter block for functions 42h, 62h:
Offset Size Description
00h BYTE reserved, must be zero (DOS <3.2)
bit 0=0: format/verify track
1: format status call (DOS 3.2+)
bits 1-7 reserved, must be zero
on return (DOS 4.0):
bit 0: set if specified tracks, sectors/track supported
bit 1: set if function not supported by BIOS
bit 2: set if specified tracks, sectors/track not supported
bit 3: set if no disk in drive
01h WORD number of disk head
03h WORD number of disk cylinder
Format of parameter block for functions 47h, 67h:
Offset Size Description
00h BYTE special-function field (must be zero)
01h BYTE disk-access flag, nonzero if access allowed by driver
---------------------------------------------
INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
AX = 440Eh
BL = drive number (0=default)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AL = 00h block device has only one logical drive assigned
1..26 the last letter used to reference the drive (1=A:,etc)
---------------------------------------------
INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
AX = 440Fh
BL = physical drive number (0=default)
Return: CF set on error
AX = error code (see AH=59h)
Note: maps logical drives to physical drives, similar to DOS's treatment of
a single physical floppy drive as both A: and B:
---------------------------------------------
INT 21 - DOS 2+ - CREATE DUPLICATE HANDLE (DUP)
AH = 45h
BX = file handle to duplicate
Return: CF set on error
AX = error code (04h,06h) (see AH=59h)
CF clear if successful
AX = new file handle
---------------------------------------------
INT 21 - DOS 2+ - FORCE DUPLICATE HANDLE (FORCDUP,DUP2)
AH = 46h
BX = existing file handle
CX = new file handle
Return: CF set on error
AX = error code (04h,06h) (see AH=59h)
Note: closes file with handle BX if it is still open
---------------------------------------------
INT 21 - DOS 2+ - GET CURRENT DIRECTORY
AH = 47h
DL = drive (0=default, 1=A, etc.)
DS:SI points to 64-byte buffer area
Return: CF set on error
AX = error code (0Fh) (see AH=59h)
Note: the returned path does not include the initial backslash
---------------------------------------------
INT 21 - DOS 2+ - ALLOCATE MEMORY
AH = 48h
BX = number of 16-byte paragraphs desired
Return: CF set on error
AX = error code (07h,08h) (see AH=59h)
BX = size of largest available block
CF clear if successful
AX = segment of allocated memory block
---------------------------------------------
INT 21 - DOS 2+ - FREE MEMORY
AH = 49h
ES = segment address of area to be freed
Return: CF set on error
AX = error code (07h,09h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
AH = 4Ah
ES = segment address of block to change
BX = new size in paragraphs
Return: CF set on error
AX = error code (07h,08h,09h) (see AH=59h)
BX = maximum size possible for the block
---------------------------------------------
INT 21 - DOS 2+ - LOAD OR EXECUTE (EXEC)
AH = 4Bh
AL = subfunction
00h load and execute program
01h load but do not execute (internal)
03h load overlay; do not create PSP
DS:DX -> ASCIZ filename
ES:BX -> parameter block (see below)
Return: CF set on error
AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
CF clear if successful
if function 1 and DOS 3+ or DESQview, process ID set to new
program's PSP; get with INT 21/AH=62h
if function 1 and DOS 2.x, new program's initial stack and
entry point returned in registers
Note: DOS 2.x destroys all registers, including SS:SP
Format of EXEC parameter block for AL=00h:
Offset Size Description
00h WORD segment of environment (0 = use current)
02h DWORD pointer to command line
06h DWORD pointer to first FCB (see AH=0Fh)
0Ah DWORD pointer to second FCB (see AH=0Fh)
Format of EXEC parameter block for AL=01h:
Offset Size Description
00h WORD segment of environment (0 = use current)
02h DWORD pointer to command line
06h DWORD pointer to first FCB (see AH=0Fh)
0Ah DWORD pointer to second FCB (see AH=0Fh)
0Eh DWORD (DOS 3+) will hold subprogram's initial SS:SP on return
12h DWORD (DOS 3+) will hold entry point (CS:IP) on return
Format of EXEC parameter block for AL=03h:
Offset Size Description
00h WORD segment load address
02h WORD segment relocation factor
Format of .EXE file header:
Offset Size Description
00h WORD 4Dh, 5Ah signature (sometimes 5Ah, 4Dh)
02h WORD image size remainder (program size mod 512)
04h WORD file size in pages (program size div 512)
06h WORD number of relocation items
08h WORD header size in paragraphs
0Ah WORD minimum extra paragraphs needed
0Ch WORD maximum extra paragraphs needed
0Eh WORD stack segment
10h WORD stack offset
12h WORD word checksum of entire file
14h DWORD initial CS:IP
18h WORD offset of relocation table
1Ah WORD overlay number
---------------------------------------------
INT 21 - DOS 2+ - QUIT WITH EXIT CODE (EXIT)
AH = 4Ch
AL = exit code
Return: never returns
---------------------------------------------
INT 21 - DOS 2+ - GET EXIT CODE OF SUBPROGRAM (WAIT)
AH = 4Dh
Return: AL = exit code of subprogram (from AH=31h or AH=4Ch)
AH = circumstance which caused termination
00h Terminate/abort
01h Control-C/Control-Break
02h Hard error
03h Terminate and stay resident
---------------------------------------------
INT 21 - DOS 2+ - FIND FIRST ASCIZ (FIND FIRST)
AH = 4Eh
CX = search attributes
DS:DX -> ASCIZ filename
Return: CF set on error
AX = error code (02h,12h) (see AH=59h)
CF clear if successful
[DTA] = data block (see below)
Format of FindFirst data block:
Offset Size Description
---PCDOS 3.10, MSDOS 3.2/3.3---
00h BYTE drive letter
01h 11 BYTEs search template
0Ch BYTE search attributes
---DOS 2.x (and some DOS 3.x???)---
00h BYTE search attributes
01h BYTE drive letter
02h 11 BYTEs search template
---DOS 2.x and most 3.x---
0Dh WORD entry count within directory
0Fh 4 BYTEs reserved
13h WORD cluster number of start of parent directory
---MSDOS 3.2/3.3---
0Dh WORD entry count within directory
0Fh WORD cluster number of start of parent directory
11h 4 BYTEs reserved
---all versions, documented fields---
15h BYTE attribute of file found
16h WORD file time
bits 11-15: hour
bits 5-10: minute
bits 0-4: seconds/2
18h WORD file date
bits 9-15: year-1980
bits 5-8: month
bits 0-4: day
1Ah DWORD file size
1Eh 13 BYTEs ASCIZ filename+extension
---------------------------------------------
INT 21 - DOS 2+ - FIND NEXT ASCIZ (FIND NEXT)
AH = 4Fh
[DTA] = data block from last AH = 4Eh/4Fh call
Return: CF set on error
AX = error code (12h) (see AH=59h)
CF clear if successful
[DTA] = data block (see AH=4Eh)
---------------------------------------------
INT 21 - DOS 2+ internal - SET PSP SEGMENT
AH = 50h
BX = segment address of new PSP (see AH=26h)
Notes: under DOS 2.x, this function cannot be invoked inside an INT 28h
handler without setting the Critical Error flag
under DOS 3+, this function does not use any of the DOS-internal stacks
and is thus fully reentrant
---------------------------------------------
INT 21 - DOS 2+ internal - GET PSP SEGMENT
AH = 51h
Return: BX = current PSP segment (see AH=26h)
Notes: under DOS 2.x, this function cannot be invoked inside an INT 28h
handler without setting the Critical Error flag
under DOS 3+, this function does not use any of the DOS-internal stacks
and is thus fully reentrant
---------------------------------------------
INT 21 - DOS 2+ internal - GET LIST OF LISTS
AH = 52h
Return: ES:BX points to DOS list of lists
Note: not supported in OS/2 compatibility box
Format of List of Lists:
Offset Size Description
-12 WORD (DOS 3.1-3.3) sharing retry count (see AX=440Bh)
-10 WORD (DOS 3.1-3.3) sharing retry delay (see AX=440Bh)
-8 DWORD (DOS 3.x) pointer to current disk buffer
-4 WORD (DOS 3.x) ??? (default 0000h)
-2 WORD segment of first memory control block
00h DWORD pointer to first DOS Device Control Block (see AH=32h)
04h DWORD pointer to list of DOS file tables (see below)
08h DWORD pointer to CLOCK$ device driver, resident or installable
0Ch DWORD pointer to actual CON device driver, resident or installable
---DOS 2.x---
10h BYTE number of logical drives in system
11h WORD maximum bytes/block of any block device
13h DWORD pointer to first disk buffer (see below)
17h Beginning (not a pointer--the real beginning!) of NUL device driver.
This is the first device on DOS's linked list of device drivers.
(see below for format)
---DOS 3.x---
10h WORD maximum bytes/block of any block device
12h DWORD pointer to first disk buffer (see below)
16h DWORD pointer to array of drive info (see below)
1Ah DWORD pointer to FCB table (if CONFIG.SYS contains FCBS=)
1Eh WORD size of FCB table
20h BYTE number of block devices
21h BYTE value of LASTDRIVE command in CONFIG.SYS (default 5)
22h 18 BYTEs actual NUL device driver header (not a pointer!)
This is the first device on DOS's linked list of device
drivers. (see below for format)
34h BYTE number of JOIN'ed drives
---DOS 3.1-3.3---
35h BYTE ??? 90h (probably padding from "EVEN" assembler directive)
36h DWORD SHARE.EXE hook: pointer to FAR routine for ???
3Ah DWORD SHARE.EXE hook: pointer to FAR routine for ???
3Eh DWORD SHARE.EXE hook -> FAR routine called on closing file???
42h DWORD SHARE.EXE hook: pointer to ??? (called by AX=5D03h)
46h DWORD SHARE.EXE hook: pointer to ??? (called by AX=5D04h)
4Ah DWORD SHARE.EXE hook: pointer to ??? (called by AX=5D02h)
4Eh DWORD SHARE.EXE hook -> FAR routine to lock region of file
call with BX = file handle
CX:DX = starting offset
SI:AX = size
Return: CF set on error
AL = DOS error code (see AH=59h)
Note: only called if file is marked as remote
52h DWORD SHARE.EXE hook -> FAR routine to unlock region of file
call with BX = file handle
CX:DX = starting offset
SI:AX = size
Return: CF set on error
AL = DOS error code (see AH=59h)
Note: only called if file is marked as remote
56h DWORD SHARE.EXE hook -> FAR routine to check if file region is locked
call with ES:DI -> system file table entry for file
CX = length of region from current position in file
Return: CF set if any portion of region locked
AX = 0021h
5Ah DWORD SHARE.EXE hook: pointer to ??? (called by AX=5D05h)
Return: CF set on error or not loaded
CF clear if successful
ES:DI -> ???
CX = ???
DX = ???
5Eh DWORD SHARE.EXE hook: pointer to FAR routine for opening FCB???
call with ES:DI -> unopened FCB
DS:SI -> system file table entry
Return: BL = C0h???
Note: calls following fields from FCB to SFT:
starting cluster of file 1Ah 0Bh
sharing record offset 1Ch 33h
file attribute 1Eh 04h
62h DWORD SHARE.EXE hook: pointer to FAR routine for ???
call with ES:DI -> system file table entry
DS:SI -> FCB
Return: CF set if SFT closed or sharing record offsets
mismatched
CF clear if successful
BX = starting cluster number from FCB
66h DWORD SHARE.EXE hook: pointer to FAR routine for ???
Note: called during open/create of a file
6Ah DWORD SHARE.EXE hook: pointer to FAR routine for ???
6Eh DWORD SHARE.EXE hook -> FAR routine to update directory info in
related SFT entries
call with ES:DI -> system file table entry for file (see below)
AX = subfunction
00h: update time stamp (offset 0Dh) and date
stamp (offset 0Fh)
01h: update file size (offset 11h) and starting
cluster (offset 0Bh). Under some
circumstances sets last read cluster
fields to start of file
02h: as function 01h, but last-read fields
always changed
03h: do both functions 00h and 02h
Note: follows pointers at offset 2Bh in system file table
---DOS 4.x---
10h WORD maximum bytes/block of any block device
12h DWORD pointer to disk buffer info (see below)
16h DWORD pointer to array of drive info (see below)
1Ah DWORD pointer to FCB table (if CONFIG.SYS contains FCBS=)
1Eh WORD size of FCB table
20h BYTE number of block devices
21h BYTE value of LASTDRIVE command in CONFIG.SYS (default 5)
22h 18 BYTEs actual NUL device driver header (not a pointer!)
This is the first device on DOS's linked list of device
drivers. (see below for format)
34h BYTE number of JOIN'ed drives???
Format of memory control block:
Offset Size Description
00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
01h WORD PSP segment of owner, 0000h if free, 0008h if belongs to DOS
03h WORD size of memory block in paragraphs
05h 3 BYTEs unused
---DOS 3.x---
08h 8 BYTEs unused
---DOS 4.x---
08h 8 BYTEs ASCII program name if PSP memory block, else garbage
null-terminated if less than 8 characters
Format of DOS 2.x system file tables:
Offset Size Description
00h DWORD pointer to next file table
04h WORD number of files in this table
06h 28h bytes per file
Offset Size Description
00h BYTE number of file handles referring to this file
01h BYTE file open mode (see AH=3Dh)
02h BYTE file attribute
03h BYTE drive (0 = character device, 1 = A, 2 = B, etc)
04h 11 BYTEs filename in FCB format (no path,no period,blank-padded)
0Fh WORD ???
11h WORD ???
13h DWORD file size???
17h WORD file date in packed format (see AX=5700h)
19h WORD file time in packed format (see AX=5700h)
1Bh BYTE device attribute (see AX=4400h)
---character device---
1Ch DWORD pointer to device driver
---block device---
1Ch WORD starting cluster of file
1Eh WORD relative cluster in file of last cluster read
------
20h WORD absolute cluster number of current cluster
22h WORD ???
24h DWORD current file position???
Format of DOS 3+ system file tables and FCB tables:
Offset Size Description
00h DWORD pointer to next file table
04h WORD number of files in this table
06h 35h bytes per file
Offset Size Description
00h WORD number of file handles referring to this file
02h WORD file open mode (see AH=3Dh)
04h BYTE file attribute
05h WORD device info word (see AX=4400h)
07h DWORD pointer to device driver header if character device
else pointer to DOS Device Control Block (see AH=32h)
0Bh WORD starting cluster of file
0Dh WORD file time in packed format (see AX=5700h)
0Fh WORD file date in packed format (see AX=5700h)
11h DWORD file size
15h DWORD current offset in file
19h WORD relative cluster within file of last cluster read
1Bh WORD absolute cluster number of last cluster read
1Dh WORD number of sector containing directory entry
1Fh BYTE number of dir entry within sector (byte offset/32)
20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
2Fh WORD (SHARE.EXE) ???
31h WORD PSP segment of file's owner (see AH=26h)
33h WORD offset within SHARE.EXE code segment of
sharing record (see below) 0000h = none
Format of sharing record:
Offset Size Description
00h BYTE flag
00h free block
01h allocated block
01h WORD size of block
03h BYTE ???
04h WORD offset in SHARE's DS of lock record (see below)
06h DWORD pointer to start of system file table chain for file
0Ah WORD ???
0Ch var ASCIZ full pathname
Format of SHARE.EXE lock record:
Offset Size Description
00h WORD offset in SHARE's DS of next lock table in list
02h DWORD offset in file of start of locked region
06h DWORD offset in file of end of locked region
0Ah DWORD pointer to System File Table entry for this file
0Eh WORD ??? 0 appears to mean 'in use'
Format of drive info table (array, 51h bytes [58h for DOS 4.x] per drive):
Offset Size Description
00h 67 BYTEs current path as ASCIZ, starting with 'x:\'
43h WORD bit flags
bit 15: network drive \ invalid drive if neither bit set
bit 14: physical drive /
bit 13: JOIN'ed, current path is actual path without JOIN
drive letter in path may differ from logical drive name
bit 12: SUBST'ed, current path is actual path without SUBST
drive letter in path may differ from logical drive name
45h DWORD pointer to DOS Disk Block for this drive
49h WORD starting cluster of current dir
0000h = root, FFFFh never accessed
4Bh WORD ??? seems always to be FFFFh
4Dh WORD ??? seems always to be FFFFh
4Fh WORD Offset of '\' in current path field representing root directory
of logical drive (2 if not SUBST'ed or JOIN'ed, otherwise
number of bytes in SUBST/JOIN path)
---DOS 4.x---
51h 7 BYTEs unknown, seems to always be zeros
Format of device driver header:
Offset Size Description
00h DWORD pointer to next driver or FFFFh if last driver
04h WORD device attributes
Character device:
bit 15 set
bit 14 IOCTL supported
bit 13 output until busy supported
bit 12 reserved
bit 11 OPEN/CLOSE/RemMedia calls supported
bits 10-7 reserved
bit 6 ??? (set by DOS 3.3 DISPLAY.SYS)
bit 5 reserved
bit 4 device is special (use INT 29 "fast console output")
bit 3 device is CLOCK$
bit 2 device is NUL
bit 1 device is standard output
bit 0 device is standard input
Block device:
bit 15 clear
bit 14 IOCTL supported
bit 13 non-IBM format
bit 12 reserved
bit 11 OPEN/CLOSE/RemMedia calls supported
bit 10 reserved
bit 9 ??? set by DOS 3.3 DRIVER.SYS for "new" drives
bit 8 ??? set by DOS 3.3 DRIVER.SYS for "new" drives
bits 7-2 reserved
bit 1 driver supports 32-bit sector addressing
bit 0 reserved
06h WORD device strategy entry point
call with ES:BX -> request header (see INT 2F/AX=1510h)
08h WORD device interrupt entry point
0Ah 8 BYTEs blank-padded character device name
12h WORD (CD-ROM driver) reserved, must be 0000h
14h BYTE (CD-ROM driver) drive letter (must initially be 00h)
15h BYTE (CD-ROM driver) number of units
16h 6 BYTEs (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
(currently '00')
Format of DOS 2.x disk buffer:
Offset Size Description
00h DWORD pointer to next disk buffer, offset = FFFFh if last
04h BYTE drive (0=A, 1=B, etc), FFh if not in use
05h 3 BYTEs unused??? (seems always to be 00h 00h 01h)
08h WORD logical sector number
0Ah BYTE number of copies to write (1 for non-FAT sectors)
0Bh BYTE sector offset between copies if multiple copies to be written
0Ch DWORD pointer to DOS Device Control Block (see AH=32h)
10h buffered data
Format of DOS 3.x disk buffer:
Offset Size Description
00h DWORD pointer to next disk buffer, offset = FFFFh if last
04h BYTE drive (0=A,1=B, etc), FFh if not in use
05h BYTE flags
bit 7: ???
bit 6: buffer dirty
bit 5: buffer in use
bit 4: ???
bit 3: sector in data area
bit 2: sector in a directory, either root or subdirectory
bit 1: sector in FAT
bit 0: boot sector??? (guess)
06h WORD logical sector number
08h BYTE number of copies to write (1 for non-FAT sectors)
09h BYTE sector offset between copies if multiple copies to be written
0Ah DWORD pointer to DOS Device Control Block (see AH=32h)
0Eh WORD unused??? (almost always 0)
10h buffered data
Format of DOS 4.x disk buffer info:
Offset Size Description
00h DWORD pointer to array of chain heads (see below)
04h WORD number of disk buffer chains (referred to as NDBCH below)
06h DWORD pointer to lookahead buffer, zero if not present
0Ah BYTE number of lookahead sectors, else zero (the y in BUFFERS=x,y)
0Bh WORD ??? seems always to be zero
0Dh WORD EMS handle for buffers, zero if not in EMS
0Fh WORD EMS physical page number used for buffers (usually 255)
11h WORD ??? seems always to be 1
13h WORD segment of EMS physical page frame
15h WORD ??? seems always to be zero
17h 4 WORDs EMS partial page mapping information???
Format of DOS 4.x disk buffer chain head (array, one entry per chain):
Offset Size Description
00h WORD EMS logical page number in which chain is resident, garbage if
not using EMS
02h DWORD pointer to least recently used buffer header. All buffers on
this chain are in the same segment.
06h WORD ??? seems always to be zero
Note: Buffered disk sectors are assigned to chain N where N is the sector's
address modulo NDBCH, 0 <= N <= NDBCH-1. Each chain resides
completely within one EMS page. This structure is in main memory even
if buffers are in EMS.
Format of DOS 4.x disk buffer:
Offset Size Description
00h WORD forward ptr, offset only, to next least recently used buffer
02h WORD backward ptr, offset only
04h BYTE drive (0=A,1=B, etc), FFh if not in use
05h BYTE flags
bit 7: ???
bit 6: buffer dirty???
bit 5: buffer in use???
bit 4: ???
bit 3: sector in data area
bit 2: sector in a directory, either root or subdirectory
bit 1: sector in FAT
bit 0: ???
06h DWORD logical sector number
0Ah BYTE number of copies to write
for FAT sectors, same as number of FATs
for data and directory sectors, usually 1
0Bh WORD offset in sectors between copies to write for FAT sectors
0Dh DWORD pointer to DOS Device Control Block (see AH=32h)
11h 3 BYTEs ??? zero or unset garbage
14h buffered data
Note: All buffered sectors which have the same address modulo NDBCH are on
the same doubly-linked circular chain. The links consist of offset
addresses only, the segment being the same for all buffers in the
chain.
---------------------------------------------
INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK
AH = 53h
DS:SI -> BPB (Bios Parameter Block)
ES:BP -> buffer for DOS Disk Block
Note: Translates BPB (see below) into a DOS Disk Block (see AH=32h).
Format of BPB:
Offset Size Description
00h WORD bytes/sector. Get from DDB bytes 2-3.
02h BYTE sectors/cluster. Get from (DDB byte 4) + 1
03h WORD reserved sectors. Get from DDB bytes 6-7
05h BYTE number of FATs. Get from DDB byte 8
06h WORD number of root dir entries. Get from DDB bytes 09h-0Ah
08h WORD total number of sectors. Get from:
((DDB bytes 0Dh-0Eh) - 1) * (sectors/cluster (BPB byte 2))
+ (DDB Bytes 0Bh-0Ch)
for DOS 4.0, set to zero if partition >32M, then set DWORD
at 15h to actual number of sectors
0Ah BYTE media descriptor byte. Get from DDB byte 16h
0Bh WORD number of sectors/FAT. Get from DDB byte 0Fh
---DOS 3+---
0Dh WORD number of sectors per track
0Fh WORD number of heads
11h DWORD number of hidden sectors
15h 11 BYTEs reserved
---DOS 4.0---
15h DWORD total number of sectors if word at 08h contains zero
---------------------------------------------
INT 21 - DOS 2+ - GET VERIFY FLAG
AH = 54h
Return: AL = 00h if flag OFF
AL = 01h if flag ON
---------------------------------------------
INT 21 - DOS 2+ internal - CREATE PSP
AH = 55h
DX = segment number at which to set up PSP (see AH=26h)
SI = value to place in memory size field at DX:[0002h]
Note: Like AH=26h but creates "child" PSP rather than copying existing one.
---------------------------------------------
INT 21 - DOS 2+ - RENAME A FILE
AH = 56h
DS:DX -> ASCIZ old name
ES:DI -> ASCIZ new name
Return: CF set on error
AX = error code (02h,03h,05h,11h) (see AH=59h)
Note: allows move between directories on same logical volume
(DOS 3+) allows renaming of directories
---------------------------------------------
INT 21 - DOS 2+ - GET FILE'S DATE/TIME
AX = 5700h
BX = file handle
Return: CF set on error
AX = error code (01h,06h) (see AH=59h)
CF clear if successful
CX = time of last write
bits 11-15: hour
5-10: minute
0-4: seconds/2
DX = date of last write
bits 9-15: year-1980
5-8: month
0-4: day
---------------------------------------------
INT 21 - DOS 2+ - SET FILE'S DATE/TIME
AX = 5701h
BX = file handle
CX = time to be set (see AX=5700h)
DX = date to be set (see AX=5700h)
Return: CF set on error
AX = error code (01h,06h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 4.0 - ???
AX = 5702h
???
Return: ???
---------------------------------------------
INT 21 - DOS 4.0 - ???
AX = 5704h
???
Return: ???
---------------------------------------------
INT 21 - DOS 3+ - GET/SET MEMORY ALLOCATION STRATEGY
AH = 58h
AL = function code
00h get allocation strategy
01h set allocation strategy
BL = strategy code
00h first fit (use first memory block large enough)
01h best fit (use smallest memory block large enough)
02h last fit (use high part of last usable memory block)
Return: CF set on error
AX = error code (01h) (see AH=59h)
CF clear if successful
AX = strategy code
Note: the Set subfunction accepts any value in BL; 2 or greater means last fit.
the Get subfunction returns the last value set, so programs should check
whether the value is >= 2, not just equal to 2.
---------------------------------------------
INT 21 - DOS 3+ - GET EXTENDED ERROR CODE
AH = 59h
BX = version code (0000h for DOS 3.x)
Return: AX = extended error code (see below)
BH = class of error (see below)
BL = suggested action (see below)
CH = locus (where error occurred) (see below)
CL, DX, SI, DI, BP, DS, and ES destroyed
Values for extended error code:
01h function number invalid
02h file not found
03h path not found
04h too many open files (no handles available)
05h access denied
06h invalid handle
07h memory control block destroyed
08h insufficient memory
09h memory block address invalid
0Ah environment invalid
0Bh format invalid
0Ch access code invalid
0Dh data invalid
0Fh invalid drive
10h attempted to remove current directory
11h not same device
12h no more files
13h disk write-protected
14h unknown unit
15h drive not ready
16h unknown command
17h data error (CRC)
18h bad request structure length
19h seek error
1Ah unknwon media type (non-DOS disk)
1Bh sector not found
1Ch printer out of paper
1Dh write fault
1Eh read fault
1Fh general failure
20h sharing violation
21h lock violation
22h disk change invalid
ES:DI -> ASCIZ volume label of required disk
23h FCB unavailable
24h sharing buffer overflow
25h-31h reserved
32h Network request not supported (DOS 3.1 + MS Networks)
33h Remote computer not listening
34h Duplicate name on network
35h Network name not found
36h Network busy
37h Network device no longer exists
38h Network BIOS command limit exceeded
39h Network adapter hardware error
3Ah Incorrect response from network
3Bh Unexpected network error
3Ch Incompatible remote adapter
3Dh Print queue full
3Eh Queue not full
3Fh Not enough space to print file
40h Network name was deleted
41h Network: Access denied
42h Network device type incorrect
43h Network name not found
44h Network name limit exceeded
45h Network BIOS session limit exceeded
46h Temporarily paused
47h Network request not accepted
48h Print/disk redirection paused (DOS 3.1 + MS Networks)
49h-4Fh reserved
50h file exists
51h reserved
52h cannot make directory
53h fail on INT 24h
54h (DOS 3.3+) too many redirections
55h (DOS 3.3+) duplicate redirection
56h (DOS 3.3+) invalid password
57h (DOS 3.3+) invalid parameter
58h (DOS 3.3+) network write fault
Values for Error Class:
01h out of resource (storage space or I/O channels)
02h temporary situation (file or record lock)
03h authorization (denied access)
04h internal (system software bug)
05h hardware failure
06h system failure (configuration file missing or incorrect)
07h application program error
08h not found
09h bad format
0Ah locked
0Bh media error
0Ch already exists
0Dh unknown
Values for Suggested Action:
01h retry
02h delayed retry
03h prompt user to reenter input
04h abort after cleanup
05h immediate abort
06h ignore
07h retry after user intervention
Values for Error Locus:
01h unknown or not appropriate
02h block device (disk error)
03h network related
04h serial device (timeout)
05h memory related
---------------------------------------------
INT 21 - DOS 3+ - CREATE UNIQUE FILE
AH = 5Ah
DS:DX -> ASCIZ directory path name ending with a '\' + 13 bytes to
receive generated filename
CX = file attributes (only bits 0,1,2,5 may be set)
Return: CF set on error
AX = error code (03h,05h) (see AH=59h)
CF clear if successful
AX = file handle
DS:DX -> path name
Note: The file created is not truly temporary. It MUST be removed by the user.
---------------------------------------------
INT 21 - DOS 3+ - CREATE NEW FILE
AH = 5Bh
DS:DX -> ASCIZ directory path name
CX = file attribute
Return: CF set on error
AX = error code (03h,04h,05h,50h) (see AH=59h)
CF clear if successful
DS:DX -> path name
Note: Unlike function 3Ch, function 5Bh will fail if the file already exists.
---------------------------------------------
INT 21 - DOS 3+ - LOCK/UNLOCK FILE ACCESS
AH = 5Ch
AL = 00h lock
01h unlock
BX = file handle
CX:DX = starting offset of region to lock
SI:DI = size of region to lock
Return: CF set on error
AX = error code (01h,06h,21h) (see AH=59h)
Note: error returned unless SHARE or network installed
---------------------------------------------
INT 21 - DOS 3.1 internal - INDIRECT FUNCTION CALL
AX = 5D00h
DS:DX -> buffer containing register values (see AX=5D0Ah)
for a call to INT 21h
Return: as appropriate for function being called
Notes: does not check AH. Out of range values will crash the system
---------------------------------------------
INT 21 - DOS 3.1 internal - SYNC???
AX = 5D01h
DS:DX -> buffer (see AX=5D0Ah), only fields at offset 12h, 14h used
???
Return: ???
Note: does something to each disk file in the System File Table which has been
written to; if remote file, calls INT 2F/AX=1107h
seems to update the time stamp of all open files which have been written
---------------------------------------------
INT 21 - DOS 3.1 internal - SHARE.EXE - ???
AX = 5D02h
DS:DX -> buffer (see AX=5D0Ah), only fields at offset 12h, 14h used
???
Return: ???
Note: error unless SHARE is loaded (calls [ListofLists+4Ah]) (see AH=52h)
---------------------------------------------
INT 21 - DOS 3.1 internal - SHARE.EXE - ???
AX = 5D03h
DS:DX -> buffer (see AX=5D0Ah), only fields at offset 12h, 14h used
???
Return: ???
Note: error unless SHARE is loaded (calls [ListofLists+42h]) (see AH=52h)
---------------------------------------------
INT 21 - DOS 3.1 internal - SHARE.EXE - ???
AX = 5D04h
DS:DX -> buffer (see AX=5D0Ah), only fields at offset 12h, 14h used
???
Return: ???
Note: error unless SHARE is loaded (calls [ListofLists+46h]) (see AH=52h)
---------------------------------------------
INT 21 - DOS 3.1 internal - SHARE.EXE - ???
AX = 5D05h
DS:DX -> buffer (see AX=5D0Ah), only fields at offset 12h, 14h used
???
Return: ES:DI -> ???
BX = ???
CX = ???
Note: error unless SHARE is loaded (calls [ListOfLists+5Ah]) (see AH=52h)
---------------------------------------------
INT 21 - DOS 3+ internal - GET ADDRESS OF CRITICAL ERROR FLAG
AX = 5D06h
DS:DX -> buffer (see AX=5D0Ah), only fields at offset 12h, 14h used
Return: DS:SI -> critical error flag
BX = ???
CX = ???
Notes: this call does a lot of other work in addition to returning the pointer
setting CritErr flag allows use of functions 50h/51h from INT 28h under
DOS 2.x by forcing use of correct stack
---------------------------------------------
INT 21 - DOS 3+ internal - ???
AH = 5Dh
AL = subfunction
07h: ???
08h: ??? (used by COMMAND.COM)
09h: ??? (used by COMMAND.COM)
Return: ???
Note: in DOS 3.10 and 3.30, these are identical, and call INT 2F/AX=1125h
---------------------------------------------
INT 21 - DOS 3.1+ internal - SET EXTENDED ERROR INFORMATION
AX = 5D0Ah
DS:DX -> 11-word error information table
Format of error information table:
Offset Size Description
00h WORD value that next call to function 59h will return in AX
02h WORD value that next call to function 59h will return in BX
04h WORD CX
06h WORD DX
08h WORD SI
0Ah WORD DI
0Ch WORD DS
0Eh WORD ES
10h WORD reserved (0)
12h WORD ??? (0 for DOS 3.1)
14h WORD ??? (0 for DOS 3.1)
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - GET MACHINE NAME
AX = 5E00h
DS:DX -> buffer for ASCIZ name (16 bytes)
Return: CF set on error
AX = error code (01h) (see AH=59h)
CH = 00h if name not defined
<> 00h defined
CL = NETBIOS name number
DS:DX -> ASCIZ machine name
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - SET MACHINE NAME
AX = 5E01h
CH = 00h undefine name
<> 0 define name
CL = name number
DS:DX -> ASCIZ name
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - SET PRINTER SETUP
AX = 5E02h
BX = redirection list index
CX = length of setup string (<= 64)
DS:SI -> string buffer
Return: CF set on error
AX = error code (01h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - GET PRINTER SETUP
AX = 5E03h
BX = redirection list index
ES:DI -> string buffer
Return: CF set on error
AX = error code (01h) (see AH=59h)
CX = length of setup string (<= 64)
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - something to do with PRINTER SETUP???
AX = 5E04h
???
Return: CF set on error
Note: calls INT 2F/AX=111Fh with 5E04h on stack
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - something to do with PRINTER SETUP???
AX = 5E05h
???
Return: CF set on error
Note: calls INT 2F/AX=111Fh with 5E05h on stack
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - something to do with PRINTER SETUP???
AX = 5E06h
???
Return: CF set on error
Note: calls INT 2F/AX=111Fh with 5E06h on stack
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - GET REDIRECTION LIST ENTRY
AX = 5F02h
BX = redirection list index
DS:SI -> 16 char local device name buffer
ES:DI -> 128 char network name buffer
Return: CF set on error
AX = error code (01h,12h) (see AH=59h)
BH = device status flag (bit 0 = 0 if valid)
BL = device type (03h if printer, 04h if drive)
CX = stored parameter value (user data)
Note: DX and BP are destroyed by this call!
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - REDIRECT DEVICE
AX = 5F03h
BL = device type
03 = printer device
04 = file device
CX = stored parameter value
DS:SI -> ASCIZ source device name
ES:DI -> destination ASCIZ network path + ASCIZ password
Return: CF set on error
AX = error code (01h,03h,05h,08h) (see AH=59h)
---------------------------------------------
INT 21 - DOS 3.1 + Microsoft Networks - CANCEL REDIRECTION
AX = 5F04h
DS:SI -> ASCIZ device name or network path
Return: CF set on error
AX = error code (01h,0Fh) (see AH=59h)
---------------------------------------------
INT 21 - DOS 3+ internal - RESOLVE PATH STRING TO FULLY QUALIFIED PATH STRING
AH = 60h
DS:SI -> ASCIZ relative path string
ES:DI -> 80-byte buffer for ASCIZ fully qualified name
Return: CF set on error
AX = error code
02h invalid source name
03h invalid drive or malformed path
others???
CF clear if successful
AX = ??? (0000h, 0040h, 004Eh, 0050h, 005Ch seen)
buffer filled with qualified name of form D:\PATH\FILE.EXT
Note: if path string is on a JOINed drive, the returned name is the one that
would be needed if the drive were not JOINed; similarly for a SUBSTed
drive letter. Because of this, it is possible to get a qualified name
that is not legal with the current combination of SUBSTs and JOINs
---------------------------------------------
INT 21 - DOS 3+ internal - UNUSED
AH = 61h
Return: AL = 00h
---------------------------------------------
INT 21 - DOS 3+ - GET PSP ADDRESS
AH = 62h
Return: BX = segment address of PSP
Note: under DOS 3+, this function does not use any of the DOS-internal stacks
and is thus fully reentrant
---------------------------------------------
INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE (2-BYTE CHARACTER SUPPORT)
AH = 63h
AL = subfunction
00h get system lead byte table
Return: DS:SI -> lead byte table
01h set/clear interim console flag (determine whether interim
bytes are returned on some console functions)
DL = 01h/00h to set/clear interim console flag
02h get interim console flag
Return: DL = interim console flag
Return: CF set on error
AX = error code (01h) (see AH=59h)
Note: does not preserve any registers other than SS:SP
---------------------------------------------
INT 21 - DOS 3.2 internal - ???
AH = 64h
AL = subfunction
00h get ???
Return: DL = ???
01h set ???
DL = ???
02h get and set ???
DL = new ???
Return: DL = old ???
---------------------------------------------
INT 21 - DOS 3.3 internal - ???
AH = 64h
AL = flag
00h ???
nonzero ???
Return: nothing
Note: seems to have something to do with the network
---------------------------------------------
INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
AH = 65h
AL = info ID
01h get general internationalization info
02h get pointer to uppercase table
04h get pointer to filename uppercase table
06h get pointer to collating sequence table
07h (DOS 4.x) get pointer to Double-Byte Character Set table
BX = code page (-1=global code page)
DX = country ID (-1=current country)
ES:DI -> country information buffer
CX = size of buffer (>= 5)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if succesful
CX = size of country information returned
ES:DI -> country information
Format of country information:
Offset Size Description
00h BYTE info ID
---if info ID = 01h---
01h WORD size
03h WORD country ID
05h WORD code page
07h 34 BYTEs country-dependent info (see AH=38h)
---if info ID = 02h---
01h DWORD pointer to uppercase table (see below)
---if info ID = 04h---
01h DWORD pointer to collating table (see below)
---if info ID = 06h---
01h DWORD pointer to filename uppercase table (see below)
---if info ID = 07h (DOS 4.x)---
01h DWORD pointer to DBCS lead byte table (see below)
Format of uppercase table:
Offset Size Description
00h WORD table size
02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
Format of collating table:
Offset Size Description
00h WORD table size
02h 256 BYTEs values used to sort characters 00h to FFh
Format of filename uppercase table:
Offset Size Description
00h WORD table size
02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
Format of DBCS lead byte table:
Offset Size Description
00h WORD length
02h 2N BYTEs start/end for N lead byte ranges
WORD 0000h (end of table)
---------------------------------------------
INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
AX = 6601h
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
BX = active code page
DX = system code page
---------------------------------------------
INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
AX = 6602h
BX = active code page
437 US
850 Multilingual
860 Portugal
863 Canada (French)
865 Norway/Denmark
DX = system code page (active page at boot time)
Return: CF set on error
AX = error code (see AH=59h)
---------------------------------------------
INT 21 - DOS 3.3+ - SET HANDLE COUNT
AH = 67h
BX = desired number of handles (max 255)
Return: CF set if error (and error code in AX)
---------------------------------------------
INT 21 - DOS 3.3+ - COMMIT FILE, WRITE ALL BUFFERED DATA TO DISK
AH = 68h
BX = file handle
Return: CF set on error
AX = error code (see AH=59h)
Note: if BX <= 20, no action is taken
---------------------------------------------
INT 21 - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER
AH = 69h
AL = subfunction
00h get serial number
01h set serial number
BL = drive (0=default, 1=A, 2=B, etc)
DS:DX -> disk info (see below)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX destroyed
(AL = 00h) buffer filled with appropriate values from extended BPB
(AL = 01h) extended BPB on disk set to values from buffer
Notes: does not generate a critical error; all errors are returned in AX
error 0005h given if no extended BPB on disk
does not work on network drives (error 0001h)
buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
extended BPB on disk
Format of disk info:
Offset Size Description
00h WORD ??? (zero)
02h DWORD disk serial number (binary)
06h 11 BYTEs volume label or "NO NAME " if none present
11h 8 BYTEs FAT type--string "FAT12 " or "FAT16 "
---------------------------------------------
INT 21 - DOS 4.0 internal - ???
AH = 6Ah
???
Return: ???
---------------------------------------------
INT 21 - DOS 4.0 internal - ???
AH = 6Bh
???
Return: ???
---------------------------------------------
INT 21 - DOS 4.0 - EXTENDED OPEN/CREATE
AX = 6C00h
BL = open mode as in AL for normal open (INT 21h/AH=3Dh)
bits 0-2: access mode
bit 3 reserved
bits 4-6: sharing mode
bit 7: inheritance
BH = 0WF00000
W = auto commit on write
F = return error rather than doing INT 24h
CX = create attribute
bit 0: readonly
bit 1: hidden
bit 2: system
bit 3: volume label
bit 4: reserved
bit 5: archive
bits 6-15 reserved
DL = action if file exists/does not exists
bits 7-4 action if file does not exist
0000 fail
0001 create
bits 3-0 action if file exists
0000 fail
0001 open
0010 replace/open
DH = 00h (reserved)
DS:SI -> ASCIZ file name
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX = file handle
CX = 1 file opened
2 file created
3 file replaced
---------------------------------------------
INT 21 - ???
AH = 89h
???
Note: called by Microsoft C 4.0 startup code
---------------------------------------------
INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES
AH = B6h
AL = subfunction
00h get extended file attributes
01h set extended file attributes
CL = attributes
bit 4: transaction tracking file
5: indexing file (to be implemented)
6: read audit (to be implemented)
7: write audit (to be implemented)
DS:DX -> ASCIZ pathname
Return: CF set on error
AL = error code
FFh file not found
8Ch caller lacks privileges
CL = current extended file attributes
---------------------------------------------
INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS
AH = B8h
AL = subfunction
00h get default print job flags
01h set default capture flags
02h get specific capture flags
03h set specific print job flags
04h get default local printer
05h set default local printer
06h set capture print queue
07h set capture print job
08h get banner user name
09h set banner user name
CX = buffer size
ES:BX -> buffer
Return: none
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET END OF JOB STATUS
AH = BBh
AL = new EOJ flag
00h disable EOJs
otherwise enable EOJs
Return: AL = old EOJ flag
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOG PHYSICAL RECORD
AH = BCh
AL = flags
bit 0: lock as well as log record
1: non-exclusive lock
BX = file handle
CX:DX = offset
BP = timeout in timer ticks (1/18 sec)
SI:DI = length
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RELEASE PHYSICAL RECORD
AH = BDh
BX = file handle
CX:DX = offset
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - CLEAR PHYSICAL RECORD
AH = BEh
BX = file handle
CX:DX = offset
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOG RECORD (FCB)
AH = BFh
AL = flags
bit 0: lock as well as log record
1: non-exclusive lock
DS:DX -> FCB
BX:CX = offset
BP = timeout in timer ticks (1/18 sec)
SI:DI = length
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RELEASE RECORD (FCB)
AH = C0h
DS:DX -> FCB
BX:CX = offset
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - CLEAR RECORD (FCB)
AH = C1h
DS:DX -> FCB
BX:CX = offset
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOCK PHYSICAL RECORD SET
AH = C2h
AL = flags
bit 1: non-exclusive lock
BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RELEASE PHYSICAL RECORD SET
AH = C3h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - CLEAR PHYSICAL RECORD SET
AH = C4h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - SEMAPHORES
AH = C5h
AL = subfunction
00h open semaphore
DS:DX -> semaphore name
CL = initial value
01h examine semaphore
Return: CX = semaphore value (sign extended)
DL = open count
02h wait on semaphore
BP = timeout in timer ticks (1/18 sec)
03h signal semaphore
04h close semaphore
CX:DX = semaphore handle (except function 00h)
Return: AL = error code
if function 00h
CX:DX = semaphore handle
BL = open count
---------------------------------------------
INT 21 - Novell NetWare 4.6 - GET OR SET LOCK MODE
AH = C6h
AL = subfunction
00h set old "compatibility" mode
01h set new extended locks mode
02h get lock mode
Return: AL = current lock mode
---------------------------------------------
INT 21 - Novell NetWare 4.0 - TTS
AH = C7h
AL = subfunction
00h begin transaction (NetWare SFT level II)
Return: AL = error code
01h end transaction (NetWare SFT level II)
Return: AL = error code
CX:DX = transaction reference number
02h TTS available (NetWare SFT level II)
Return: AL = completion code
00h TTS not available
01h TTS available
FDh TTS available but disabled
03h abort transaction (NetWare SFT level II)
Return: AL = error code
04h transaction status
05h get application thresholds
06h set application thresholds
07h get workstation thresholds
08h set workstation thresholds
Return: ???
---------------------------------------------
INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
AH = C8h
if function C6h lock mode 00h:
DL = mode
00h no wait
01h wait
if function C6h lock mode 01h:
BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
AH = C9h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - LOG PERSONAL FILE (FCB)
AH = CAh
DS:DX -> FCB
if function C6h lock mode 01h:
AL = log and lock flag
00h log file only
01h lock as well as log file
BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - LOCK FILE SET
AH = CBh
if function C6h lock mode 00h:
DL = mode
00h no wait
01h wait
if function C6h lock mode 01h:
BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE FILE (FCB)
AH = CCh
DS:DX -> FCB
Return: none
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE FILE SET
AH = CDh
Return: none
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR FILE (FCB)
AH = CEh
DS:DX -> FCB
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR FILE SET
AH = CFh
Return: AL = 00h
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOG LOGICAL RECORD
AH = D0h
DS:DX -> record string
if function C6h lock mode 01h:
AL = flags
bit 0: lock as well as log the record
bit 1: non-exclusive lock
BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOCK LOGICAL RECORD SET
AH = D1h
if function C6h lock mode 00h:
DL = mode
00h no wait
01h wait
if function C6h lock mode 01h:
BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE LOGICAL RECORD
AH = D2h
DS:DX -> record string
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE LOGICAL RECORD SET
AH = D3h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR LOGICAL RECORD
AH = D4h
DS:DX -> record string
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR LOGICAL RECORD SET
AH = D5h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - END OF JOB
AH = D6h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SYSTEM LOGOUT
AH = D7h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS
AH = DAh
DL = volume number
ES:DI -> reply buffer (see below)
Return: AL = 00h
Format of reply buffer:
Offset Size Description
00h WORD sectors/block
02h WORD total blocks
04h WORD unused blocks
06h WORD total directory entries
08h WORD unused directory entries
0Ah 16 BYTEs volume name, null padded
1Ah WORD removable flag, 0000h = not removable
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET NUMBER OF LOCAL DRIVES
AH = DBh
Return: AL = number of local disks
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET STATION NUMBER
AH = DCh
Return: AL = station number
00h if NetWare not loaded or this machine is a non-dedicated server
CX = station number in ASCII
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET ERROR MODE
AH = DDh
DL = error mode
00h display critical I/O errors
01h extended errors for all I/O in AL
02h extended errors for critical I/O in AL
Return: AL = previous error mode
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE
AH = DEh
AL = broadcast mode
00h receive console and workstation broadcasts
01h receive console broadcasts only
02h receive no broadcasts
03h store all broadcasts for retrieval
04h get broadcast mode
05h disable shell tiemr interrupt checks
06h enable shell timer interrupt checks
Return: AL = old broadcast mode
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CAPTURE
AH = DFh
AL = subfunction
00h start LPT capture
01h end LPT capture
02h cancel LPT capture
03h flush LPT capture
04h start specific capture
05h end specific capture
06h cancel specific capture
07h flush specific capture
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - PRINT SPOOLING
AH = E0h
DS:SI -> request buffer
ES:DI -> reply buffer
subfunction in third byte of request buffer
00h spool data to a capture file
01h close and queue capture file
02h set spool flags
03h spool existing file
04h get spool queue entry
05h remove entry from spool queue
06h get printer status
09h create a disk capture file
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES
AH = E1h
DS:SI -> request buffer
ES:DI -> reply buffer
subfunction in third byte of request buffer
00h send broadcast message
01h get broadcase message
02h disable station broadcasts
03h enable station broadcasts
04h send personal message
05h get personal message
06h open message pipe
07h close message pipe
08h check pipe status
09h broadcast to console
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - DIRECTORY FUNCTIONS
AH = E2h
DS:SI -> request buffer
ES:DI -> reply buffer
subfunction in third byte of request buffer
00h set directory handle
01h get directory path
02h scan directory information
03h get effective directory rights
04h modify maximum rights mask
05h get volume number
06h get volume name
0Ah create directory
0Bh delete directory
0Ch scan directory for trustees
0Dh add trustee to directory
0Eh delete trustee from directory
0Fh rename directory
10h purge erased files
11h restore erased file
12h allocate permanent directory handle
13h allocate temporary directory handle
14h deallocate directory handle
15h get volume info with handle
16h allocate special temporary directory handle
17h retrieve a short base handle (Advanced NetWare 2.0)
18h restore a short base handle (Advanced NetWare 2.0)
19h set directory information
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CONNECTION CONTROL
AH = E3h
DS:SI -> requst buffer
ES:DI -> reply buffer
subfunction in third byte of request buffer
00h login
01h change password
02h map user to station set
03h map object to number
04h map number to object
05h get station's logged information
06h get station's root mask (obsolete)
07h map group name to number
08h map number to group name
09h get memberset M of group G
0Ah enter login area
0Bh ???
0Ch ???
0Dh log network message
0Eh get disk utilization (Advanced NetWare 1.0)
0Fh scan file information (Advanced NetWare 1.0)
10h set file information (Advanced NetWare 1.0)
11h get file server information (Advanced NetWare 1.0)
12h ???
13h get internet address (Advanced NetWare 1.02)
14h login to file server (Advanced NetWare 2.0)
15h get object connection numbers (Advanced NetWare 2.0)
16h get connection information (Advanced NetWare 1.0)
32h create object (Advanced NetWare 1.0)
33h delete object (Advanced NetWare 1.0)
34h rename object (Advanced NetWare 1.0)
35h get object ID (Advanced NetWare 1.0)
36h get object name (Advanced NetWare 1.0)
37h scan object (Advanced NetWare 1.0)
38h change object security (Advanced NetWare 1.0)
39h create propery (Advanced NetWare 1.0)
3Ah delete property (Advanced NetWare 1.0)
3Bh change property security (Advanced NetWare 1.0)
3Ch scan property (Advanced NetWare 1.0)
3Dh read property value (Advanced NetWare 1.0)
3Eh write property value (Advanced NetWare 1.0)
3Fh verify object password (Advanced NetWare 1.0)
40h change object password (Advanced NetWare 1.0)
41h add object to set (Advanced NetWare 1.0)
42h delete object from set (Advanced NetWare 1.0)
43h is object in set? (Advanced NetWare 1.0)
44h close bindery (Advanced NetWare 1.0)
45h open bindery (Advanced NetWare 1.0)
46h get bindery access level (Advanced NetWare 1.0)
47h scan object trustee paths (Advanced NetWare 1.0)
C8h check console priviledges
C9h get file server description strings
CAh set file server date and time
CBh disable file server login
CCh enable file server login
CDh get file server login status
CEh purge all erased files
CFh disable transaction tracking
D0h enable transaction tracking
D1h send console broadcast
D2h clear connection number
D3h down file server
D4h get file system statistics
D5h get transaction tracking statistics
D6h read disk cache statistics
D7h get drive mapping table
D8h read physical disk statistics
D9h get disk channel statistics
DAh get connection's task information
DBh get list of connection's open files
DCh get list of connections using a file
DDh get physical record locks by connection and file
DEh get physical record locks by file
DFh get logical records by connection
E0h get logical record information
E1h get connection's semaphores
E2h get semaphore information
E3h get LAN driver's configuration information
E5h get connection's usage statistics
E6h get object's remaining disk space
E7h get server LAN I/O statistics
E8h get server miscellaneous information
E9h get volume information
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
AH = E4h
CL = file attributes
bit 0: read only
1: hidden
2: system
7: shareable
DX:DX -> FCB
Return: AL = error code
---------------------------------------------
INT 21 - DoubleDos - INSTALLATION CHECK
AX = E400h
Return: AL <> 00h if DoubleDos is active
---------------------------------------------
INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
AH = E5h
DS:DX -> FCB
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
AH = E6h
CX:DX = number of bytes to copy
DS:SI -> source FCB
ES:DI -> destination FCB
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET FILE SERVER DATE AND TIME
AH = E7h
DS:DX -> reply buffer
BYTE year - 1900
BYTE month
BYTE day
BYTE hours
BYTE minutes
BYTE seconds
BYTE day of week (0 = Sunday)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - SET FCB RE-OPEN MODE
AH = E8h
DL = mode
00h no automatic re-open
01h auto re-open
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - SHELL'S "GET BASE STATUS"
AH = E9h
AL = subfunction
00h get directory handle
DX = drive number to check (0 = A:)
Return: AL = network pathbase
AH = base flags
00h drive not currently mapped to a base
01h drive is mapped to a permanent base
02h drive is mapped to a temporary base
03h drive exists locally
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RETURN SHELL VERSION
AH = EAh
AL = subfunction
00h return code in AL
Return: AL = hardware type
00h IBM PC
01h Victor 9000
01h get workstation environment string
ES:DI -> 40-byte buffer
Return: buffer filled with three null-terminated entries:
major operating system
version
hardware type
Return: AH = 00h if DOS
---------------------------------------------
INT 21 - DoubleDos - TURN OFF TASK SWITCHING
AH = EAh
Return: task switching turned off
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOG FILE
AH = EBh
DS:DX -> ASCIZ filename
if function C6h lock mode 01h:
AL = flags
00h log file only
01h lock as well as log file
BP = timeout in timer ticks (1/18 second)
Return: AL = error code
---------------------------------------------
INT 21 - DoubleDos - TURN ON TASK SWITCHING
AH = EBh
Return: task switching turned on
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RELEASE FILE
AH = ECh
DS:DX -> ASCIZ filename
Return: none
---------------------------------------------
INT 21 - DoubleDos - GET VIRTUAL SCREEN ADDRESS
AH = ECh
Return: ES = segment of virtual screen
Note: screen address can change if task-switching is on!!
---------------------------------------------
INT 21 - Novell NetWare - CLEAR FILE
AH = EDh
DS:DX -> ASCIZ filename
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - GET PHYSICAL STATION NUMBER
AH = EEh
Return: CX:BX:AX = six-byte address
---------------------------------------------
INT 21 - DoubleDos - GIVE AWAY TIME TO OTHER TASKS
AH = EEh
AL = number of 55ms time slices to give away
Return: returns after giving away time slices
---------------------------------------------
INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO
AH = EFh
AL = subfunction
00h get drive handle table
01h get drive flag table
02h get drive connection ID table
03h get connection ID table
04h get file server name table
Return: ES:DI -> shell status table
---------------------------------------------
INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID
AH = F0h
AL = subfunction
00h set preferred connection ID
01h get preferred connection ID
02h get default connection ID
03h LPT capture active
04h set primary connection ID
05h get primary connection ID
DL = preferred file server
Return: AL = selected file server
---------------------------------------------
INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION
AH = F1h
AL = subfunction
00h attach to file server
DL = preferred file server
01h detach from file server
02h logout from file server
Return: AL = completion code
---------------------------------------------
INT 21 - Novell NetWare - ???
AH = F2h
???
Return: ???
---------------------------------------------
INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY
AH = F3h
ES:DI -> request string (see below)
Return: AL = status/error code
CX:DX = number of bytes copied
Format of request string:
Offset Size Description
00h WORD source file handle
02h WORD destination file handle
04h DWORD starting offset in source
08h DWORD starting offset in destination
0Ch DWORD number of bytes to copy
---------------------------------------------
INT 21 - CED - INSTALLABLE COMMANDS
AH = FFh
AL = 00h add installable command
BL = mode - bit 0 = 1 callable from DOS prompt
bit 1 = 1 callable from application
DS:SI -> CR-terminated command name
ES:DI -> FAR routine entry point
AL = 01h remove installable command
DS:SI -> CR-terminated command name
AL = 02h reserved, may be used to test for CED installation
Return: CF set on error
AX = 01h invalid function
02h command not found (subfunction 01h only)
08h insufficient memory (subfunction 00h only)
0Eh bad data (subfunction 00h only)
AH = 0FFh if CED not installed
---------------------------------------------
INT 22 - DOS - TERMINATE ADDRESS
FAR (DWORD) address of routine to be executed when program "returns to DOS".
Should NEVER be called directly.
---------------------------------------------
INT 23 - DOS - CONTROL "C" EXIT ADDRESS
Automatically called from keyboard scanner when CTRL-C or CTRL-BREAK is
detected. Normally aborts program and returns to DOS, but may be changed.
---------------------------------------------
INT 24 - DOS - FATAL ERROR HANDLER ADDRESS
Automatically called upon detection of unrecoverable I/O error.
Normally points to routine in resident part of COMMAND.COM that prints
"Abort, Retry, Ignore?" message and takes the reply, but may be overridden
if desired.
Provides the following values in registers on entry to interrupt handler:
AH: bit 7 = 0 disk I/O error
= 1 other error -- if block device, bad FAT
-- if char device, code in DI
bit 6 unused
bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
bit 2 \ disk area of error 00 = DOS area 01 = FAT
bit 1 / 10 = root dir 11 = data area
bit 0 = 1 if write, 0 if read
AL = drive number if AH bit 7 = 1, otherwise undefined
BP:SI -> header of device driver for which error occurred
block device if high bit of BP:[SI+4] set
low byte of DI:
00h write-protect error
01h unknown unit
02h drive not ready
03h unknown command
04h data error (bad CRC)
05h bad request structure length
06h seek error
07h unknown media type
08h sector not found
09h printer out of paper
0Ah write fault
0Bh read fault
0Ch general failure
0Dh (DOS 3+) sharing violation
0Eh (DOS 3+) lock violation
0Fh (DOS 3+) invalid disk change
10h (DOS 3+) FCB unavailable
11h (DOS 3+) sharing buffer overflow
Handler must return
AL = 00h ignore error
= 01h retry operation
= 02h terminate program through INT 22h
= 03h fail system call in progress (DOS 3+)
---------------------------------------------
INT 25 - DOS - ABSOLUTE DISK READ (except DOS 4.0/COMPAQ DOS 3.31 >32M partitn)
AL = drive number (0=A, 1=B, etc)
DS:BX = Disk Transfer Address (buffer)
CX = number of sectors to read
DX = first relative sector to read
Return: CF set on error
AL = error code issued to INT 24h in low half of DI
AH = 80h if attachment failed to respond
40h if seek operation failed
20h if controller failed
10h if data error (bad CRC)
08h if DMA failure
04h if requested sector not found
03h if write-protected disk
02h if bad address mark
01h if bad command
Note: ORIGINAL FLAGS ON STACK! May destroy all registers except segment regs
BUG: DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
invalid drive number
---------------------------------------------
INT 25 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK READ (>32M hard-disk partitn)
AL = drive number (0=A, 1=B, etc)
CX = FFFFh
DS:BX -> disk read packet (see below)
Return: same as above???
Note: partition is potentially >32M (and requires this form of the call) if
bit 1 of device attribute word in device driver is set
Format of disk read packet:
Offset Size Description
00h DWORD sector number
04h WORD number of sectors to read
06h DWORD transfer address
---------------------------------------------
INT 26 - DOS - ABSOLUTE DISK WRITE (except DOS 4.0/COMPAQ DOS 3.31 >32M partn)
AL = drive number (0=A, 1=B, etc)
DS:BX = Disk Transfer Address (buffer)
CX = number of sectors to write
DX = first relative sector to write
Return: CF set on error
AL = error code issued to INT 24h in low half of DI
AH = same error codes as for INT 25h
Note: ORIGINAL FLAGS ON STACK!
BUG: DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
invalid drive number
---------------------------------------------
INT 26 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK WRITE (>32M hard-disk partitn)
AL = drive number (0=A, 1=B, etc)
CX = FFFFh
DS:BX -> disk write packet (see below)
Return: same as above???
Note: partition is potentially >32M (and requires this form of the call) if
bit 1 of device attribute word in device driver is set
Format of disk write packet:
Offset Size Description
00h DWORD sector number
04h WORD number of sectors to read
06h DWORD transfer address
---------------------------------------------
INT 27 - DOS - TERMINATE BUT STAY RESIDENT
CS = current program segment
DX = last program byte + 1
Return: never
---------------------------------------------